]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
selinux: do not include <linux/*.h> headers from host programs
authorMasahiro Yamada <masahiroy@kernel.org>
Fri, 6 Sep 2024 17:29:13 +0000 (02:29 +0900)
committerPaul Moore <paul@paul-moore.com>
Thu, 3 Oct 2024 19:34:24 +0000 (15:34 -0400)
The header, security/selinux/include/classmap.h, is included not only
from kernel space but also from host programs.

It includes <linux/capability.h> and <linux/socket.h>, which pull in
more <linux/*.h> headers. This makes the host programs less portable,
specifically causing build errors on macOS.

Those headers are included for the following purposes:

 - <linux/capability.h> for checking CAP_LAST_CAP
 - <linux/socket.h> for checking PF_MAX

These checks can be guarded by __KERNEL__ so they are skipped when
building host programs. Testing them when building the kernel should
be sufficient.

The header, security/selinux/include/initial_sid_to_string.h, includes
<linux/stddef.h> for the NULL definition, but this is not portable
either. Instead, <stddef.h> should be included for host programs.

Reported-by: Daniel Gomez <da.gomez@samsung.com>
Closes: https://lore.kernel.org/lkml/20240807-macos-build-support-v1-6-4cd1ded85694@samsung.com/
Closes: https://lore.kernel.org/lkml/20240807-macos-build-support-v1-7-4cd1ded85694@samsung.com/
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Signed-off-by: Paul Moore <paul@paul-moore.com>
scripts/selinux/genheaders/Makefile
scripts/selinux/genheaders/genheaders.c
scripts/selinux/mdp/Makefile
scripts/selinux/mdp/mdp.c
security/selinux/include/classmap.h
security/selinux/include/initial_sid_to_string.h

index 1faf7f07e8db3841fcc7a41206e9ce0f24844782..866f60e78882829c0398ad69dbf51f1a9258f7a0 100644 (file)
@@ -1,5 +1,3 @@
 # SPDX-License-Identifier: GPL-2.0
 hostprogs-always-y += genheaders
-HOST_EXTRACFLAGS += \
-       -I$(srctree)/include/uapi -I$(srctree)/include \
-       -I$(srctree)/security/selinux/include
+HOST_EXTRACFLAGS += -I$(srctree)/security/selinux/include
index 15520806889ee898568913b1cbdaa451e10d20da..3834d7eb0af6663506cca02c42a4c0d07adacc83 100644 (file)
@@ -1,8 +1,5 @@
 // SPDX-License-Identifier: GPL-2.0
 
-/* NOTE: we really do want to use the kernel headers here */
-#define __EXPORTED_HEADERS__
-
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
index d61058ddd15cf7c2d36168c4ec53aab722666b1a..673782e3212f90f0ca150561afb73ac894eb32bd 100644 (file)
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
 hostprogs-always-y += mdp
 HOST_EXTRACFLAGS += \
-       -I$(srctree)/include/uapi -I$(srctree)/include \
+       -I$(srctree)/include \
        -I$(srctree)/security/selinux/include -I$(objtree)/include
 
 clean-files    := policy.* file_contexts
index 1415604c3d24ebcbe8ad10cbd0df9b89e09e54d9..52365921c043556d4b99022c5435b20eaa061570 100644 (file)
  * Authors: Serge E. Hallyn <serue@us.ibm.com>
  */
 
-
-/* NOTE: we really do want to use the kernel headers here */
-#define __EXPORTED_HEADERS__
-
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
index 7229c9bf6c2703397d99c45a6c7accfc8f92f483..5e2b0eaa73c40da7c421f4a65544ffbc859b7507 100644 (file)
@@ -1,8 +1,5 @@
 /* SPDX-License-Identifier: GPL-2.0 */
 
-#include <linux/capability.h>
-#include <linux/socket.h>
-
 #define COMMON_FILE_SOCK_PERMS                                            \
        "ioctl", "read", "write", "create", "getattr", "setattr", "lock", \
                "relabelfrom", "relabelto", "append", "map"
        "mac_override", "mac_admin", "syslog", "wake_alarm", "block_suspend", \
                "audit_read", "perfmon", "bpf", "checkpoint_restore"
 
+#ifdef __KERNEL__ /* avoid this check when building host programs */
+#include <linux/capability.h>
+
 #if CAP_LAST_CAP > CAP_CHECKPOINT_RESTORE
 #error New capability defined, please update COMMON_CAP2_PERMS.
 #endif
+#endif
 
 /*
  * Note: The name for any socket class should be suffixed by "socket",
@@ -181,6 +182,10 @@ const struct security_class_mapping secclass_map[] = {
        { NULL }
 };
 
+#ifdef __KERNEL__ /* avoid this check when building host programs */
+#include <linux/socket.h>
+
 #if PF_MAX > 46
 #error New address family defined, please update secclass_map.
 #endif
+#endif
index 99b353b2abb413c33404d10461902c2befdfb5ac..d7ba60b6249185ea2b710565191f149ea8d1dba3 100644 (file)
@@ -1,6 +1,10 @@
 /* SPDX-License-Identifier: GPL-2.0 */
 
+#ifdef __KERNEL__
 #include <linux/stddef.h>
+#else
+#include <stddef.h>
+#endif
 
 static const char *const initial_sid_to_string[] = {
        NULL, /* zero placeholder, not used */