Messages in this thread | | | Subject | Re: [PATCH] kcsan: fix debugfs initcall return type | From | Nathan Chancellor <> | Date | Fri, 14 May 2021 11:40:22 -0700 |
| |
On 5/14/2021 7:45 AM, Marco Elver wrote: > On Fri, 14 May 2021 at 16:10, Greg Kroah-Hartman > <gregkh@linuxfoundation.org> wrote: >> On Fri, May 14, 2021 at 04:00:08PM +0200, Arnd Bergmann wrote: >>> From: Arnd Bergmann <arnd@arndb.de> >>> >>> 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@arndb.de> > [...] >>> >> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > > Reviewed-by: Marco Elver <elver@google.com> > > 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
| |