From: John Sperbeck <jsperbeck@google.com>
To: Joel Granados <joel.granados@kernel.org>, Kees Cook <kees@kernel.org>
Cc: Wen Yang <wen.yang@linux.dev>,
linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org,
John Sperbeck <jsperbeck@google.com>
Subject: [PATCH] sysctl: unregister sysctl table after testing
Date: Tue, 24 Dec 2024 09:11:24 -0800 [thread overview]
Message-ID: <20241224171124.3676538-1-jsperbeck@google.com> (raw)
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=y
CONFIG_SYSCTL_KUNIT_TEST=m
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:
<TASK>
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 sysctl_check_table_array")
Signed-off-by: John Sperbeck <jsperbeck@google.com>
---
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_greater_int_max(
static void sysctl_test_register_sysctl_sz_invalid_extra_value(
struct kunit *test)
{
+ struct ctl_table_header *hdr;
unsigned char data = 0;
struct ctl_table table_foo[] = {
{
@@ -412,7 +413,9 @@ static void sysctl_test_register_sysctl_sz_invalid_extra_value(
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 = register_sysctl("foo", table_qux);
+ KUNIT_EXPECT_NOT_NULL(test, hdr);
+ unregister_sysctl_table(hdr);
}
static struct kunit_case sysctl_test_cases[] = {
--
2.47.1.613.gc27f4b7a9f-goog
next reply other threads:[~2024-12-24 17:11 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-24 17:11 John Sperbeck [this message]
2024-12-26 11:58 ` [PATCH] sysctl: unregister sysctl table after testing Wen Yang
2025-01-06 14:15 ` Joel Granados
2025-01-12 21:50 ` [PATCH v2] sysctl: expose sysctl_check_table for unit testing and use it John Sperbeck
2025-01-13 6:01 ` kernel test robot
2025-01-13 7:00 ` [PATCH v3] " John Sperbeck
2025-01-13 10:01 ` Joel Granados
2025-01-16 10:01 ` Joel Granados
2025-01-18 12:28 ` kernel test robot
2025-01-21 21:33 ` [PATCH v4] " John Sperbeck
2025-03-12 21:23 ` Joel Granados
2025-03-12 21:15 ` [PATCH] sysctl: unregister sysctl table after testing Joel Granados
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241224171124.3676538-1-jsperbeck@google.com \
--to=jsperbeck@google.com \
--cc=joel.granados@kernel.org \
--cc=kees@kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=wen.yang@linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.