Skip to content

Commit 02a6e4b

Browse files
masahir0yarndb
authored andcommitted
kbuild: prevent exported headers from including <stdlib.h>, <stdbool.h>
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 including <stdlib.h> from the system header search paths. 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 has no functional change. If we can make kernel headers self-contained (that is, none of exported kernel headers includes system headers), we will be able to add the -nostdinc flag, but that is much far from where we stand now. As a realistic solution, we can ban 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 <[email protected]> Signed-off-by: Arnd Bergmann <[email protected]> Reviewed-by: Greg Kroah-Hartman <[email protected]>
1 parent 783eb35 commit 02a6e4b

File tree

3 files changed

+15
-1
lines changed

3 files changed

+15
-1
lines changed

usr/dummy-include/stdbool.h

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/* SPDX-License-Identifier: GPL-2.0-only */
2+
#ifndef _STDBOOL_H
3+
#define _STDBOOL_H
4+
5+
#error "Please do not include <stdbool.h> from exported headers"
6+
7+
#endif /* _STDBOOL_H */

usr/dummy-include/stdlib.h

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/* SPDX-License-Identifier: GPL-2.0-only */
2+
#ifndef _STDLIB_H
3+
#define _STDLIB_H
4+
5+
#error "Please do not include <stdlib.h> from exported headers"
6+
7+
#endif /* _STDLIB_H */

usr/include/Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ UAPI_CFLAGS += $(filter -m32 -m64 --target=%, $(KBUILD_CFLAGS))
1515
# USERCFLAGS might contain sysroot location for CC.
1616
UAPI_CFLAGS += $(USERCFLAGS)
1717

18-
override c_flags = $(UAPI_CFLAGS) -Wp,-MMD,$(depfile) -I$(objtree)/usr/include
18+
override c_flags = $(UAPI_CFLAGS) -Wp,-MMD,$(depfile) -I $(obj) -I $(srctree)/usr/dummy-include
1919

2020
# The following are excluded for now because they fail to build.
2121
#

0 commit comments

Comments
 (0)