On Tue, Mar 29, 2022 at 3:04 PM Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> wrote: > > On Tue, Mar 29, 2022 at 02:21:30AM +0900, Masahiro Yamada wrote: > > Some UAPI headers included <stdlib.h>, like this: > > > > #ifndef __KERNEL__ > > #include <stdlib.h> > > #endif > > > > As it turned out, they just included it for no good reason. > > > > After some fixes, now I can compile-test UAPI headers > > (CONFIG_UAPI_HEADER_TEST=y) without <stdlib.h> included. > > > > To avoid somebody getting it back again, this commit adds the dummy > > header, usr/dummy-include/stdlib.h > > > > I added $(srctree)/usr/dummy-include to the header search paths. > > Because it is searched before the system directories, if someone > > tries to include <stdlib.h>, they will see the error message. > > > > While I am here, I also replaced $(objtree)/usr/include with $(obj), but > > it is just a small refactoring. > > > > If we achieve the situation where none of system headers is included > > from exported kernel headers (i.e. kernel headers become self-contained), > > we might be able to add -nostdinc, but that is much far from where we > > stand now. (see many no-header-test lines in usr/include/Makefile) > > > > As a realistic solution, you can forbid header inclusion individually by > > putting a dummy header into usr/dummy-include/. > > > > Currently, no header include <stdbool.h>. I put it as well before somebody > > attempts to use it. > > > > Signed-off-by: Masahiro Yamada <masahiroy@xxxxxxxxxx> > > Nice work! > > Reviewed-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> I made a mistake in the patch subject. The correct title should be: kbuild: forbid exported headers from including <stdlib.h>, <stdbool.h> I will fix it in v2. We cannot ban <stdint.h> for now because there are still some users. A fix-up patch exists, but the fuse maintainer was opposed to it. https://lore.kernel.org/lkml/20220318171405.2728855-1-cmllamas@xxxxxxxxxx/ -- Best Regards Masahiro Yamada