On Tue, Apr 7, 2026 at 9:52 AM Andrey Grodzovsky
<[email protected]> wrote:
>
> When an unqualified kprobe target exists in both vmlinux and a loaded
> module, number_of_same_symbols() returns a count greater than 1,
> causing kprobe attachment to fail with -EADDRNOTAVAIL even though the
> vmlinux symbol is unambiguous.
>
> When no module qualifier is given and the symbol is found in vmlinux,
> return the vmlinux-only count without scanning loaded modules. This
> preserves the existing behavior for all other cases:
> - Symbol only in a module: vmlinux count is 0, falls through to module
>   scan as before.
> - Symbol qualified with MOD:SYM: mod != NULL, unchanged path.
> - Symbol ambiguous within vmlinux itself: count > 1 is returned as-is.
>
> Fixes: 926fe783c8a6 ("tracing/kprobes: Fix symbol counting logic by looking 
> at modules as well")
> Fixes: 9d8616034f16 ("tracing/kprobes: Add symbol counting check when module 
> loads")
> Suggested-by: Ihor Solodrai <[email protected]>
> Acked-by: Jiri Olsa <[email protected]>
> Signed-off-by: Andrey Grodzovsky <[email protected]>
> ---
>  kernel/trace/trace_kprobe.c | 7 +++++++
>  1 file changed, 7 insertions(+)
>
> diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
> index a5dbb72528e0..99c41ea8b6d7 100644
> --- a/kernel/trace/trace_kprobe.c
> +++ b/kernel/trace/trace_kprobe.c
> @@ -765,6 +765,13 @@ static unsigned int number_of_same_symbols(const char 
> *mod, const char *func_nam
>         if (!mod)
>                 kallsyms_on_each_match_symbol(count_symbols, func_name, 
> &ctx.count);
>
> +       /* If the symbol is found in vmlinux, use vmlinux resolution only.
> +        * This prevents module symbols from shadowing vmlinux symbols
> +        * and causing -EADDRNOTAVAIL for unqualified kprobe targets.
> +        */

Please do not use networking style comments in the new code.
Same applies to selftests.

pw-bot: cr

Reply via email to