[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20220328172130.197319-2-masahiroy@kernel.org>
Date: Tue, 29 Mar 2022 02:21:30 +0900
From: Masahiro Yamada <masahiroy@...nel.org>
To: linux-kbuild@...r.kernel.org
Cc: Arnd Bergmann <arnd@...db.de>, linux-kernel@...r.kernel.org,
Masahiro Yamada <masahiroy@...nel.org>,
"Dmitry V. Levin" <ldv@...linux.org>,
Elliot Berman <quic_eberman@...cinc.com>,
Geert Uytterhoeven <geert@...ux-m68k.org>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
Nick Desaulniers <ndesaulniers@...gle.com>
Subject: [PATCH 2/2] kbuild: forbid exported headers from including <stdint.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 <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@...nel.org>
---
usr/dummy-include/stdbool.h | 7 +++++++
usr/dummy-include/stdlib.h | 7 +++++++
usr/include/Makefile | 2 +-
3 files changed, 15 insertions(+), 1 deletion(-)
create mode 100644 usr/dummy-include/stdbool.h
create mode 100644 usr/dummy-include/stdlib.h
diff --git a/usr/dummy-include/stdbool.h b/usr/dummy-include/stdbool.h
new file mode 100644
index 000000000000..54ff9e9c90ac
--- /dev/null
+++ b/usr/dummy-include/stdbool.h
@@ -0,0 +1,7 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+#ifndef _STDBOOL_H
+#define _STDBOOL_H
+
+#error "Please do not include <stdbool.h> from exported headers"
+
+#endif /* _STDBOOL_H */
diff --git a/usr/dummy-include/stdlib.h b/usr/dummy-include/stdlib.h
new file mode 100644
index 000000000000..e8c21888e371
--- /dev/null
+++ b/usr/dummy-include/stdlib.h
@@ -0,0 +1,7 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+#ifndef _STDLIB_H
+#define _STDLIB_H
+
+#error "Please do not include <stdlib.h> from exported headers"
+
+#endif /* _STDLIB_H */
diff --git a/usr/include/Makefile b/usr/include/Makefile
index fa9819e022b7..7740777b49f8 100644
--- a/usr/include/Makefile
+++ b/usr/include/Makefile
@@ -15,7 +15,7 @@ UAPI_CFLAGS += $(filter -m32 -m64 --target=%, $(KBUILD_CFLAGS))
# USERCFLAGS might contain sysroot location for CC.
UAPI_CFLAGS += $(USERCFLAGS)
-override c_flags = $(UAPI_CFLAGS) -Wp,-MMD,$(depfile) -I$(objtree)/usr/include
+override c_flags = $(UAPI_CFLAGS) -Wp,-MMD,$(depfile) -I $(obj) -I $(srctree)/usr/dummy-include
# The following are excluded for now because they fail to build.
#
--
2.32.0
Powered by blists - more mailing lists