From nobody Sat Feb 7 17:56:00 2026 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E3BE214D433 for ; Tue, 24 Dec 2024 17:11:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1735060293; cv=none; b=p/obDdQ+IIMhusi81MAnlQJfTp7vcJ4o7/5BK+0bB85Ofj+5wH1iFCILaseF3MrRa2NYYyA+Kq1HuMEa58u9K2GMkZ4eDzKCDzyVS+VG05yeLaSFG1dZO9eIuoRLcHLLnwb9KYIItnoq/QxTOl843OYAwcrvWTsZXVDseX7JD8o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1735060293; c=relaxed/simple; bh=asLAwQJicYyZLJC1MNZBxgBSJIeawN+3ejHDfNXwB+w=; h=Date:Mime-Version:Message-ID:Subject:From:To:Cc:Content-Type; b=JQvlk1CiKG1GzYg894VtrPQi/q9a48fDf5Y3VzFu+z6FS+EH2poYtjXFhzwd5DZcoFeosVSB54TIj1nPc3Pvx4DN8cyceoJffw/dEX4erd8/QMIeDSozcKFy5yVXHL20+nxn7Nlq/YEg2lDfMkF/Y69wfEPSAZd24RnXQdEGCpc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--jsperbeck.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=vMgFZi+L; arc=none smtp.client-ip=209.85.216.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--jsperbeck.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="vMgFZi+L" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-2f129f7717fso5523143a91.0 for ; Tue, 24 Dec 2024 09:11:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1735060291; x=1735665091; darn=vger.kernel.org; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=KZY5Za5D37Z3up26nRyyJq//3SGwDKKcBKx13SsJE3M=; b=vMgFZi+LWDC9SMpgrZgTsWh8+bHW5C89Tusp1zUp6nR3P7SdvExnXGEfNxV1bJVGn6 AO0rGKcQ8Fo1vdYD0p3Vi6O7TrpKVnen3HEg1wirhD5nfEcwjsbX5QW3TOuOgaUe7VaK eVfap3hTWe7XktrYzDZZ64YrYRNQpIRTgiVuPuHpbIk9skeUTvFMOm/dRNC3NyEbBqPA gH8TOCLg6LwjYTLNSO8Ci4A0YrQjHjsqjKGkwrKCWqmLDQzyE9zp49unvg4b9puWP2VJ /wPBBWMSrZ+VWCB3ssfalxPQfuYKE1ew3SYU8OKxSsW5dYOHgoBSO19qI6eRBXCFKS2h J7wA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1735060291; x=1735665091; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=KZY5Za5D37Z3up26nRyyJq//3SGwDKKcBKx13SsJE3M=; b=ej3XBIg3fLrfIYBKR6iYL6Q7psIJsHFtZtQmUdPAAxzNWBPWdvCaV5GvWvA3RqtNdz dtlnEo1W5lRCDHDVe9VXNNIlFitFNzw6ZKmW0TG9ZeLge6sxIomTVAWCVDK/mK33UC0w F/h+WgBhyhC+MS57W3SZFpcCan1qlk6ZvjxYMVYPgfOQhl7up3Yx6wpSnQdAgxvFjlgt E/IDxBEHmCKPS1TA7kJSZ1j/EsqTa7YNubTY+HE0UUOQM+jhycQFCYCijBpknZCFqX4L M5X0yl664rxkKGjAwVolXNwS8S+JWzkZEqxPxIamwXaHa9LD9H4TScux4KamPfFne0+A jksw== X-Forwarded-Encrypted: i=1; AJvYcCVJQLJWATzIqzbf7vUzv8NH6dfEmZeJJItOr3LW2tibnES5tK57QABnWtrxLSP7eqP7NdnUWCS0nvz5yiI=@vger.kernel.org X-Gm-Message-State: AOJu0YxXo4KvLue7Q66jPgVaO735VsRQZ1gkUtgQRaRo/+a2dg2Yb3Cb GVS7MWWJssMOSAp1jNX2b/I8iFjyijj0kwDuIYM/rVcYwbKjv71PeqbF4b5pyyirZgT4ANwVqij wWkRy6IoBGErRoQ== X-Google-Smtp-Source: AGHT+IGCBmJDOEpowr6QdeLBoNzr3MO0MLez0iKB9/7oHCQdnyWAWz6JtbU0Ea/Ch1TDLlG/7Fvc7IZUAuxx8XE= X-Received: from pjyd15.prod.google.com ([2002:a17:90a:dfcf:b0:2ea:46ed:5d3b]) (user=jsperbeck job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:2649:b0:2ee:dd9b:e402 with SMTP id 98e67ed59e1d1-2f452e0e152mr31990027a91.12.1735060291269; Tue, 24 Dec 2024 09:11:31 -0800 (PST) Date: Tue, 24 Dec 2024 09:11:24 -0800 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 X-Mailer: git-send-email 2.47.1.613.gc27f4b7a9f-goog Message-ID: <20241224171124.3676538-1-jsperbeck@google.com> Subject: [PATCH] sysctl: unregister sysctl table after testing From: John Sperbeck To: Joel Granados , Kees Cook Cc: Wen Yang , linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, John Sperbeck Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In commit b5ffbd139688 ("sysctl: move the extra1/2 boundary check of u8 to sysctl_check_table_array"), a kunit test was added that registers a sysctl table. If the test is run as a module, then a lingering reference to the module is left behind, and a 'sysctl -a' leads to a panic. This can be reproduced with these kernel config settings: CONFIG_KUNIT=3Dy CONFIG_SYSCTL_KUNIT_TEST=3Dm Then run these commands: modprobe sysctl-test rmmod sysctl-test sysctl -a The panic varies but generally looks something like this: BUG: unable to handle page fault for address: ffffa4571c0c7db4 #PF: supervisor read access in kernel mode #PF: error_code(0x0000) - not-present page PGD 100000067 P4D 100000067 PUD 100351067 PMD 114f5e067 PTE 0 Oops: Oops: 0000 [#1] SMP NOPTI ... ... ... RIP: 0010:proc_sys_readdir+0x166/0x2c0 ... ... ... Call Trace: iterate_dir+0x6e/0x140 __se_sys_getdents+0x6e/0x100 do_syscall_64+0x70/0x150 entry_SYSCALL_64_after_hwframe+0x76/0x7e If we unregister the test sysctl table, then the failure is gone. Fixes: b5ffbd139688 ("sysctl: move the extra1/2 boundary check of u8 to sys= ctl_check_table_array") Signed-off-by: John Sperbeck Reviewed-by: Wen Yang --- kernel/sysctl-test.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/kernel/sysctl-test.c b/kernel/sysctl-test.c index 3ac98bb7fb82..2184c1813b1d 100644 --- a/kernel/sysctl-test.c +++ b/kernel/sysctl-test.c @@ -373,6 +373,7 @@ static void sysctl_test_api_dointvec_write_single_great= er_int_max( static void sysctl_test_register_sysctl_sz_invalid_extra_value( struct kunit *test) { + struct ctl_table_header *hdr; unsigned char data =3D 0; struct ctl_table table_foo[] =3D { { @@ -412,7 +413,9 @@ static void sysctl_test_register_sysctl_sz_invalid_extr= a_value( =20 KUNIT_EXPECT_NULL(test, register_sysctl("foo", table_foo)); KUNIT_EXPECT_NULL(test, register_sysctl("foo", table_bar)); - KUNIT_EXPECT_NOT_NULL(test, register_sysctl("foo", table_qux)); + hdr =3D register_sysctl("foo", table_qux); + KUNIT_EXPECT_NOT_NULL(test, hdr); + unregister_sysctl_table(hdr); } =20 static struct kunit_case sysctl_test_cases[] =3D { --=20 2.47.1.613.gc27f4b7a9f-goog