Re: [PATCH 2/2] powerpc/text-patching: Fix possible stringop-overread compilation error
From: Xie Yuanbin <hidden>
Date: 2026-02-09 14:11:38
Also in:
linux-hardening, lkml
On Mon, 9 Feb 2026 14:41:51 +0100, Christophe Leroy (CS GROUP) wrote:
Le 09/02/2026 à 14:25, Xie Yuanbin a écrit :quoted
On Fri, 6 Feb 2026 20:53:55 +0100, Christophe Leroy (CS GROUP) wrote:quoted
ppc_kallsyms_lookup_name() only has two callers and they call it with a built-in string. I think we can do something a lot simpler, something like (untested): static inline unsigned long __ppc_kallsyms_lookup_name(const char *name) { unsigned long addr = kallsyms_lookup_name(name); if (IS_ENABLED(CONFIG_PPC64_ELF_ABI_V2) && addr) addr = ppc_function_entry((void *)addr); return addr; } #ifdef CONFIG_PPC64_ELF_ABI_V1 #define ppc_kallsyms_lookup_name(x) __ppc_kallsyms_lookup_name("." ## x); #else #define ppc_kallsyms_lookup_name(x) __ppc_kallsyms_lookup_name(x) #endif ChristopheWhen CONFIG_PPC64_ELF_ABI_V1=y, it seems that the try of lookupinp the original non-dot symbol is missing. What about this (Only the compilation test is performed):static inline unsigned long __ppc_kallsyms_lookup_name(const char *name) { unsigned long addr = kallsyms_lookup_name(name); if (IS_ENABLED(CONFIG_PPC64_ELF_ABI_V2) && addr) addr = ppc_function_entry((void *)addr); return addr; } #define ppc_kallsyms_lookup_name(x) ({ \ unsigned long addr = 0; \ if (IS_ENABLED(CONFIG_PPC64_ELF_ABI_V1)) \ addr = __ppc_kallsyms_lookup_name("." x); \ if (!addr) \ addr = __ppc_kallsyms_lookup_name(x); \ addr; \ })Good point. To avoid duplicating the string I'd suggest: static inline unsigned long __ppc_kallsyms_lookup_name(const char *name) { unsigned long addr = kallsyms_lookup_name(name); if (IS_ENABLED(CONFIG_PPC64_ELF_ABI_V1) && !addr) addr = kallsyms_lookup_name(name + 1); if (IS_ENABLED(CONFIG_PPC64_ELF_ABI_V2) && addr) addr = ppc_function_entry((void *)addr); return addr; } #ifdef CONFIG_PPC64_ELF_ABI_V1 #define ppc_kallsyms_lookup_name(x) __ppc_kallsyms_lookup_name("." x); #else #define ppc_kallsyms_lookup_name(x) __ppc_kallsyms_lookup_name(x) #endif
This seems good, but there seems to be an extra ';' after
'__ppc_kallsyms_lookup_name("." x)' ?
After removing the extra ';', I performed a compilation test,
no warnings.