Re: [PATCH] kcsan: fix debugfs initcall return type

From: Nathan Chancellor
Date: Fri May 14 2021 - 14:40:30 EST


On 5/14/2021 7:45 AM, Marco Elver wrote:
On Fri, 14 May 2021 at 16:10, Greg Kroah-Hartman
<gregkh@xxxxxxxxxxxxxxxxxxx> wrote:
On Fri, May 14, 2021 at 04:00:08PM +0200, Arnd Bergmann wrote:
From: Arnd Bergmann <arnd@xxxxxxxx>

clang points out that an initcall funciton should return an 'int':

kernel/kcsan/debugfs.c:274:15: error: returning 'void' from a function with incompatible result type 'int'
late_initcall(kcsan_debugfs_init);
~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
include/linux/init.h:292:46: note: expanded from macro 'late_initcall'
#define late_initcall(fn) __define_initcall(fn, 7)

Fixes: e36299efe7d7 ("kcsan, debugfs: Move debugfs file creation out of early init")
Signed-off-by: Arnd Bergmann <arnd@xxxxxxxx>
[...]

Reviewed-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>

Reviewed-by: Marco Elver <elver@xxxxxxxxxx>

Thanks for catching this -- it boggles my mind why gcc nor clang
wouldn't warn about this by default...
Is this a new clang?

KCSAN appears to only support x86_64, which also selects HAVE_ARCH_PREL32_RELOCATIONS, meaning that the initcalls never have their types validated because there is no assignment:

https://elixir.bootlin.com/linux/v5.12.4/source/include/linux/init.h#L240

In the case of CONFIG_LTO_CLANG, the initcall function is called in the stub function, resulting in the error that we see here.

Hopefully that makes sense :)

Cheers,
Nathan