Hi Arnd, On Thu, Apr 4, 2024 at 4:52 PM Arnd Bergmann <arnd@xxxxxxxxxx> wrote: > From: Arnd Bergmann <arnd@xxxxxxxx> > > Building with W=1 in some configurations produces a false positive > warning for kallsyms: > > kernel/kallsyms.c: In function '__sprint_symbol.isra': > kernel/kallsyms.c:503:17: error: 'strcpy' source argument is the same as destination [-Werror=restrict] > 503 | strcpy(buffer, name); > | ^~~~~~~~~~~~~~~~~~~~ > > This originally showed up while building with -O3, but later started > happening in other configurations as well, depending on inlining > decisions. The underlying issue is that the local 'name' variable is > always initialized to the be the same as 'buffer' in the called functions > that fill the buffer, which gcc notices while inlining, though it could > see that the address check always skips the copy. > > The calling conventions here are rather unusual, as all of the internal > lookup functions (bpf_address_lookup, ftrace_mod_address_lookup, > ftrace_func_address_lookup, module_address_lookup and > kallsyms_lookup_buildid) already use the provided buffer and either return > the address of that buffer to indicate success, or NULL for failure, > but the callers are written to also expect an arbitrary other buffer > to be returned. > > Rework the calling conventions to return the length of the filled buffer > instead of its address, which is simpler and easier to follow as well > as avoiding the warning. Leave only the kallsyms_lookup() calling conventions > unchanged, since that is called from 16 different functions and > adapting this would be a much bigger change. > > Link: https://lore.kernel.org/all/20200107214042.855757-1-arnd@xxxxxxxx/ > Link: https://lore.kernel.org/lkml/20240326130647.7bfb1d92@xxxxxxxxxxxxxxxxxx/ > Reviewed-by: Luis Chamberlain <mcgrof@xxxxxxxxxx> > Acked-by: Steven Rostedt (Google) <rostedt@xxxxxxxxxxx> > Signed-off-by: Arnd Bergmann <arnd@xxxxxxxx> > --- > v5: fix ftrace_mod_address_lookup return value, > rebased on top of 2e114248e086 ("bpf: Replace deprecated strncpy with strscpy") > v4: fix string length > v3: use strscpy() instead of strlcpy() > v2: complete rewrite after the first patch was rejected (in 2020). This > is now one of only two warnings that are in the way of enabling > -Wextra/-Wrestrict by default. Aha, commit 06bb7fc0feee32d9 ("kbuild: turn on -Wrestrict by default") still made v6.10-rc1, without this one... > Signed-off-by: Arnd Bergmann <arnd@xxxxxxxx> Thanks, this fixes kernel/kallsyms.c: In function ‘__sprint_symbol.constprop’: kernel/kallsyms.c:492:17: warning: ‘strcpy’ source argument is the same as destination [-Werror=restrict] 492 | strcpy(buffer, name); | ^~~~~~~~~~~~~~~~~~~~ I am seeing with shmobile_defconfig and gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04). Tested-by: Geert Uytterhoeven <geert+renesas@xxxxxxxxx> Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds