* [PATCH v2 1/2] selinux: do not include <linux/*.h> headers from host programs
@ 2024-09-06 17:29 Masahiro Yamada
2024-09-06 17:29 ` [PATCH v2 2/2] selinux: move genheaders to security/selinux/ Masahiro Yamada
2024-09-06 18:37 ` [PATCH v2 1/2] selinux: do not include <linux/*.h> headers from host programs Paul Moore
0 siblings, 2 replies; 5+ messages in thread
From: Masahiro Yamada @ 2024-09-06 17:29 UTC (permalink / raw)
To: Paul Moore, Stephen Smalley, Ondrej Mosnacek, selinux
Cc: linux-kbuild, Daniel Gomez, linux-kernel, Masahiro Yamada
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>
---
Changes in v2:
- Reword the commit description
- Keep the location of CAP_LAST_CAP
- Include <stddef.h> for host programs
| 4 +---
| 3 ---
scripts/selinux/mdp/Makefile | 2 +-
scripts/selinux/mdp/mdp.c | 4 ----
security/selinux/include/classmap.h | 11 ++++++++---
security/selinux/include/initial_sid_to_string.h | 4 ++++
6 files changed, 14 insertions(+), 14 deletions(-)
--git a/scripts/selinux/genheaders/Makefile b/scripts/selinux/genheaders/Makefile
index 1faf7f07e8db..866f60e78882 100644
--- a/scripts/selinux/genheaders/Makefile
+++ b/scripts/selinux/genheaders/Makefile
@@ -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
--git a/scripts/selinux/genheaders/genheaders.c b/scripts/selinux/genheaders/genheaders.c
index 15520806889e..3834d7eb0af6 100644
--- a/scripts/selinux/genheaders/genheaders.c
+++ b/scripts/selinux/genheaders/genheaders.c
@@ -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>
diff --git a/scripts/selinux/mdp/Makefile b/scripts/selinux/mdp/Makefile
index d61058ddd15c..673782e3212f 100644
--- a/scripts/selinux/mdp/Makefile
+++ b/scripts/selinux/mdp/Makefile
@@ -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
diff --git a/scripts/selinux/mdp/mdp.c b/scripts/selinux/mdp/mdp.c
index 1415604c3d24..52365921c043 100644
--- a/scripts/selinux/mdp/mdp.c
+++ b/scripts/selinux/mdp/mdp.c
@@ -11,10 +11,6 @@
* 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>
diff --git a/security/selinux/include/classmap.h b/security/selinux/include/classmap.h
index 7229c9bf6c27..5e2b0eaa73c4 100644
--- a/security/selinux/include/classmap.h
+++ b/security/selinux/include/classmap.h
@@ -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"
@@ -36,9 +33,13 @@
"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
diff --git a/security/selinux/include/initial_sid_to_string.h b/security/selinux/include/initial_sid_to_string.h
index 99b353b2abb4..d7ba60b62491 100644
--- a/security/selinux/include/initial_sid_to_string.h
+++ b/security/selinux/include/initial_sid_to_string.h
@@ -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 */
--
2.43.0
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH v2 2/2] selinux: move genheaders to security/selinux/
2024-09-06 17:29 [PATCH v2 1/2] selinux: do not include <linux/*.h> headers from host programs Masahiro Yamada
@ 2024-09-06 17:29 ` Masahiro Yamada
2024-09-06 18:37 ` Paul Moore
2024-09-06 18:37 ` [PATCH v2 1/2] selinux: do not include <linux/*.h> headers from host programs Paul Moore
1 sibling, 1 reply; 5+ messages in thread
From: Masahiro Yamada @ 2024-09-06 17:29 UTC (permalink / raw)
To: Paul Moore, Stephen Smalley, Ondrej Mosnacek, selinux
Cc: linux-kbuild, Daniel Gomez, linux-kernel, Masahiro Yamada
This tool is only used in security/selinux/Makefile.
Move it to security/selinux/ so that 'make clean' can clean it up.
Please note 'make clean' does not clean scripts/ because tools under
scripts/ are often used for external module builds. Obviously, genheaders
is not the case here.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
---
Changes in v2:
- Add more reason to move genheaders to security/selinux/
scripts/remove-stale-files | 3 +++
scripts/selinux/Makefile | 2 +-
| 2 --
| 3 ---
security/selinux/.gitignore | 1 +
security/selinux/Makefile | 7 +++++--
| 0
7 files changed, 10 insertions(+), 8 deletions(-)
delete mode 100644 scripts/selinux/genheaders/.gitignore
delete mode 100644 scripts/selinux/genheaders/Makefile
rename {scripts/selinux/genheaders => security/selinux}/genheaders.c (100%)
diff --git a/scripts/remove-stale-files b/scripts/remove-stale-files
index f38d26b78c2a..4e7d25668a98 100755
--- a/scripts/remove-stale-files
+++ b/scripts/remove-stale-files
@@ -20,4 +20,7 @@ set -e
# yard. Stale files stay in this file for a while (for some release cycles?),
# then will be really dead and removed from the code base entirely.
+# moved to security/selinux/genheaders
+rm -f scripts/selinux/genheaders/genheaders
+
rm -f *.spec
diff --git a/scripts/selinux/Makefile b/scripts/selinux/Makefile
index 59494e14989b..4b1308fa5732 100644
--- a/scripts/selinux/Makefile
+++ b/scripts/selinux/Makefile
@@ -1,2 +1,2 @@
# SPDX-License-Identifier: GPL-2.0-only
-subdir-y := mdp genheaders
+subdir-y := mdp
diff --git a/scripts/selinux/genheaders/.gitignore b/scripts/selinux/genheaders/.gitignore
deleted file mode 100644
index 5fcadd307908..000000000000
--- a/scripts/selinux/genheaders/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0-only
-genheaders
diff --git a/scripts/selinux/genheaders/Makefile b/scripts/selinux/genheaders/Makefile
deleted file mode 100644
index 866f60e78882..000000000000
--- a/scripts/selinux/genheaders/Makefile
+++ /dev/null
@@ -1,3 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0
-hostprogs-always-y += genheaders
-HOST_EXTRACFLAGS += -I$(srctree)/security/selinux/include
diff --git a/security/selinux/.gitignore b/security/selinux/.gitignore
index 168fae13ca5a..01c0df8ab009 100644
--- a/security/selinux/.gitignore
+++ b/security/selinux/.gitignore
@@ -1,3 +1,4 @@
# SPDX-License-Identifier: GPL-2.0-only
av_permissions.h
flask.h
+/genheaders
diff --git a/security/selinux/Makefile b/security/selinux/Makefile
index c47519ed8156..86f0575f670d 100644
--- a/security/selinux/Makefile
+++ b/security/selinux/Makefile
@@ -36,7 +36,10 @@ quiet_cmd_genhdrs = GEN $(addprefix $(obj)/,$(genhdrs))
# see the note above, replace the $targets and 'flask.h' rule with the lines
# below:
# targets += $(genhdrs)
-# $(addprefix $(obj)/,$(genhdrs)) &: scripts/selinux/...
+# $(addprefix $(obj)/,$(genhdrs)) &: $(obj)/genheaders FORCE
targets += flask.h
-$(obj)/flask.h: scripts/selinux/genheaders/genheaders FORCE
+$(obj)/flask.h: $(obj)/genheaders FORCE
$(call if_changed,genhdrs)
+
+hostprogs := genheaders
+HOST_EXTRACFLAGS += -I$(srctree)/security/selinux/include
diff --git a/scripts/selinux/genheaders/genheaders.c b/security/selinux/genheaders.c
similarity index 100%
rename from scripts/selinux/genheaders/genheaders.c
rename to security/selinux/genheaders.c
--
2.43.0
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH v2 2/2] selinux: move genheaders to security/selinux/
2024-09-06 17:29 ` [PATCH v2 2/2] selinux: move genheaders to security/selinux/ Masahiro Yamada
@ 2024-09-06 18:37 ` Paul Moore
0 siblings, 0 replies; 5+ messages in thread
From: Paul Moore @ 2024-09-06 18:37 UTC (permalink / raw)
To: Masahiro Yamada
Cc: Stephen Smalley, Ondrej Mosnacek, selinux, linux-kbuild,
Daniel Gomez, linux-kernel
On Fri, Sep 6, 2024 at 1:29 PM Masahiro Yamada <masahiroy@kernel.org> wrote:
>
> This tool is only used in security/selinux/Makefile.
>
> Move it to security/selinux/ so that 'make clean' can clean it up.
>
> Please note 'make clean' does not clean scripts/ because tools under
> scripts/ are often used for external module builds. Obviously, genheaders
> is not the case here.
>
> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
> ---
>
> Changes in v2:
> - Add more reason to move genheaders to security/selinux/
>
> scripts/remove-stale-files | 3 +++
> scripts/selinux/Makefile | 2 +-
> scripts/selinux/genheaders/.gitignore | 2 --
> scripts/selinux/genheaders/Makefile | 3 ---
> security/selinux/.gitignore | 1 +
> security/selinux/Makefile | 7 +++++--
> .../selinux/genheaders => security/selinux}/genheaders.c | 0
> 7 files changed, 10 insertions(+), 8 deletions(-)
> delete mode 100644 scripts/selinux/genheaders/.gitignore
> delete mode 100644 scripts/selinux/genheaders/Makefile
> rename {scripts/selinux/genheaders => security/selinux}/genheaders.c (100%)
Better, thank you. See my comments on patch 1/2 for when you can
expect this to be merged into the SELinux tree.
--
paul-moore.com
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2 1/2] selinux: do not include <linux/*.h> headers from host programs
2024-09-06 17:29 [PATCH v2 1/2] selinux: do not include <linux/*.h> headers from host programs Masahiro Yamada
2024-09-06 17:29 ` [PATCH v2 2/2] selinux: move genheaders to security/selinux/ Masahiro Yamada
@ 2024-09-06 18:37 ` Paul Moore
2024-10-03 20:29 ` Paul Moore
1 sibling, 1 reply; 5+ messages in thread
From: Paul Moore @ 2024-09-06 18:37 UTC (permalink / raw)
To: Masahiro Yamada
Cc: Stephen Smalley, Ondrej Mosnacek, selinux, linux-kbuild,
Daniel Gomez, linux-kernel
On Fri, Sep 6, 2024 at 1:29 PM Masahiro Yamada <masahiroy@kernel.org> wrote:
>
> 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>
> ---
>
> Changes in v2:
> - Reword the commit description
> - Keep the location of CAP_LAST_CAP
> - Include <stddef.h> for host programs
>
> scripts/selinux/genheaders/Makefile | 4 +---
> scripts/selinux/genheaders/genheaders.c | 3 ---
> scripts/selinux/mdp/Makefile | 2 +-
> scripts/selinux/mdp/mdp.c | 4 ----
> security/selinux/include/classmap.h | 11 ++++++++---
> security/selinux/include/initial_sid_to_string.h | 4 ++++
> 6 files changed, 14 insertions(+), 14 deletions(-)
This looks much better, thank you. We're currently at -rc6 which is
later than I would like to merge patches like this (I try to stick to
bug fixes or trivial changes at this point in the development cycle),
so I'm going to hold on to this until after the upcoming merge window
where I'll merge it into selinux/dev. See the below doc for more
information on how the SELinux tree is managed:
https://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/selinux.git/tree/README.md
--
paul-moore.com
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2 1/2] selinux: do not include <linux/*.h> headers from host programs
2024-09-06 18:37 ` [PATCH v2 1/2] selinux: do not include <linux/*.h> headers from host programs Paul Moore
@ 2024-10-03 20:29 ` Paul Moore
0 siblings, 0 replies; 5+ messages in thread
From: Paul Moore @ 2024-10-03 20:29 UTC (permalink / raw)
To: Masahiro Yamada
Cc: Stephen Smalley, Ondrej Mosnacek, selinux, linux-kbuild,
Daniel Gomez, linux-kernel
On Fri, Sep 6, 2024 at 2:37 PM Paul Moore <paul@paul-moore.com> wrote:
> On Fri, Sep 6, 2024 at 1:29 PM Masahiro Yamada <masahiroy@kernel.org> wrote:
> >
> > 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>
> > ---
> >
> > Changes in v2:
> > - Reword the commit description
> > - Keep the location of CAP_LAST_CAP
> > - Include <stddef.h> for host programs
> >
> > scripts/selinux/genheaders/Makefile | 4 +---
> > scripts/selinux/genheaders/genheaders.c | 3 ---
> > scripts/selinux/mdp/Makefile | 2 +-
> > scripts/selinux/mdp/mdp.c | 4 ----
> > security/selinux/include/classmap.h | 11 ++++++++---
> > security/selinux/include/initial_sid_to_string.h | 4 ++++
> > 6 files changed, 14 insertions(+), 14 deletions(-)
>
> This looks much better, thank you. We're currently at -rc6 which is
> later than I would like to merge patches like this (I try to stick to
> bug fixes or trivial changes at this point in the development cycle),
> so I'm going to hold on to this until after the upcoming merge window
> where I'll merge it into selinux/dev. See the below doc for more
> information on how the SELinux tree is managed:
>
> https://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/selinux.git/tree/README.md
I just merged this into selinux/dev, you should see it reflected in
the kernel.org shortly.
--
paul-moore.com
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2024-10-03 20:30 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-09-06 17:29 [PATCH v2 1/2] selinux: do not include <linux/*.h> headers from host programs Masahiro Yamada
2024-09-06 17:29 ` [PATCH v2 2/2] selinux: move genheaders to security/selinux/ Masahiro Yamada
2024-09-06 18:37 ` Paul Moore
2024-09-06 18:37 ` [PATCH v2 1/2] selinux: do not include <linux/*.h> headers from host programs Paul Moore
2024-10-03 20:29 ` Paul Moore
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®