From: sashiko-bot@kernel.org
To: "Jim Cromie" <jim.cromie@gmail.com>
Cc: bpf@vger.kernel.org
Subject: Re: [PATCH v3 1/4] kallsyms: Add test_kallsyms_perf module to benchmark lookup latency
Date: Tue, 22 Sep 2026 18:57:05 +0000 [thread overview]
Message-ID: <20260922185705.C4DDD1F000FF@smtp.kernel.org> (raw)
In-Reply-To: <20260922-ksyms-tune-v3-1-681a34ea05d9@gmail.com>
Thank you for your contribution! Sashiko AI review found 4 potential issue(s) to consider:
- [High] kallsyms: NULL pointer dereference in early boot via run_test parameter
- [High] kallsyms: divide-by-zero kernel panic via sysfs num_iters TOCTOU
- [Medium] kallsyms: multi-second boot stall on every boot when config is enabled
- [Low] kallsyms: benchmark latency skewed by cond_resched() preemption
--
commit 1f88a15d1a75733470768014a06f1b4c5dac957f
Author: Jim Cromie <jim.cromie@gmail.com>
Subject: kallsyms: Add test_kallsyms_perf module to benchmark lookup latency
This commit adds a microbenchmark module for the kallsyms subsystem to
evaluate name-to-address, address-to-name, and full table walk performance.
It is configured as a built-in boolean test and includes a sysfs trigger
as well as an automatic run during late boot.
> diff --git a/lib/test_kallsyms_perf.c b/lib/test_kallsyms_perf.c
> index 0000000000000..4d0c39c0a94f7
> --- /dev/null
> +++ b/lib/test_kallsyms_perf.c
> @@ -0,0 +1,241 @@
[ ... ]
> +static void run_name_lookup_bench(void)
> +{
> + u64 t0, t1, dt_hit, dt_miss;
> + unsigned long addr = 0;
> + unsigned int i, nr_hits, nr_misses;
[ ... ]
> + /* 1. Name search: Existing symbols (Hits) */
> + t0 = ktime_get_ns();
> + for (i = 0; i < num_iters; i++) {
> + const char *sym = hit_symbols[i % nr_hits];
> +
> + if (unlikely(!(i & 0x3fff)))
> + cond_resched();
[Severity: Low]
Because this is inside the ktime_get_ns() timing loop, if preemption occurs,
will the elapsed wall-clock time include the sleep time? Could this heavily
inflate the measured latency per iteration, especially since
kallsyms_on_each_match_symbol() already calls cond_resched() internally?
> +
> + kallsyms_on_each_match_symbol(match_cb, sym, &addr);
> + OPTIMIZER_HIDE_VAR(addr);
> + }
> + t1 = ktime_get_ns();
> + dt_hit = t1 - t0;
[ ... ]
> + pr_info("Name Search Hit: %llu ns/lookup (%llu ms total, %u iters)\n",
> + div_u64(dt_hit, num_iters), div_u64(dt_hit, 1000000), num_iters);
[Severity: High]
Since num_iters is exposed via sysfs with 0644 permissions, could a concurrent
write change num_iters to 0 while this benchmark is running? Does this dynamic
read of the global variable risk a divide-by-zero kernel panic here, despite
the initial check in run_kallsyms_benchmark()?
> + pr_info("Name Search Miss: %llu ns/lookup (%llu ms total, %u iters)\n",
> + div_u64(dt_miss, num_iters), div_u64(dt_miss, 1000000), num_iters);
> +}
[ ... ]
> +static int param_set_trigger(const char *val, const struct kernel_param *kp)
> +{
> + return run_kallsyms_benchmark();
> +}
> +
> +static const struct kernel_param_ops param_ops_trigger = {
> + .set = param_set_trigger,
> +};
> +module_param_cb(run_test, ¶m_ops_trigger, NULL, 0200);
[Severity: High]
If this module parameter is passed on the kernel command line during early
boot, parse_args() will invoke this callback before timekeeping_init() has
run. Will this cause a NULL pointer dereference when the benchmark
subsequently calls ktime_get_ns() and tries to read the uninitialized
tk_core timekeeper?
> +MODULE_PARM_DESC(run_test, "Write 1 to trigger kallsyms benchmark run");
> +
> +static int __init test_kallsyms_init(void)
> +{
> + return run_kallsyms_benchmark();
> +}
> +late_initcall(test_kallsyms_init);
[Severity: Medium]
Because CONFIG_TEST_KALLSYMS_PERF is a built-in bool, this late_initcall
will execute the heavy benchmark unconditionally on every boot. Will this
introduce a multi-second boot stall for any kernel built with this config
enabled?
> +
> +MODULE_DESCRIPTION("Microbenchmark test module for kallsyms subsystem");
> +MODULE_AUTHOR("Jim Cromie <jim.cromie@gmail.com>");
> +MODULE_LICENSE("GPL");
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260922-ksyms-tune-v3-0-681a34ea05d9@gmail.com?part=1
next prev parent reply other threads:[~2026-09-22 18:57 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-22 18:45 [PATCH v3 0/4] kallsyms: Accelerate symbol name lookups by ~19x Jim Cromie
2026-09-22 18:45 ` [PATCH v3 1/4] kallsyms: Add test_kallsyms_perf module to benchmark lookup latency Jim Cromie
2026-09-22 18:57 ` sashiko-bot [this message]
2026-09-22 18:45 ` [PATCH v3 2/4] kallsyms: Match compressed tokens on the fly during binary search Jim Cromie
2026-09-22 18:45 ` [PATCH v3 3/4] kallsyms: Add dynamic lookup index for batch resolution Jim Cromie
2026-09-22 18:57 ` sashiko-bot
2026-09-22 18:45 ` [PATCH v3 4/4] kallsyms: Unroll 24-bit sequence reconstruction in get_symbol_seq() Jim Cromie
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=20260922185705.C4DDD1F000FF@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=jim.cromie@gmail.com \
--cc=sashiko-reviews@lists.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox