build: add support for SELinux to include/image.mk
authorThomas Petazzoni <thomas.petazzoni@bootlin.com>
Sat, 18 Jul 2020 13:01:54 +0000 (08:01 -0500)
committerDaniel Golle <daniel@makrotopia.org>
Mon, 31 Aug 2020 00:15:41 +0000 (01:15 +0100)
This allows the build process to prepare a squashfs filesystem for use
with SELinux.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
[rebase, add commit message]
Signed-off-by: W. Michael Petullo <mike@flyn.org>
config/Config-build.in
include/image.mk

index 499f84690f5f7a0657b7fd61f71e59432d3638b5..fc94f4d45e0c4cd309555a8231cf93ec9277f2e2 100644 (file)
@@ -328,4 +328,14 @@ menu "Global build settings"
                        bool "Full"
        endchoice
 
+       config TARGET_ROOTFS_SECURITY_LABELS
+               bool "Enable rootfs security labels"
+               select KERNEL_SQUASHFS_XATTR
+               select KERNEL_EXT4_FS_SECURITY
+               select KERNEL_F2FS_FS_SECURITY
+               select KERNEL_UBIFS_FS_SECURITY
+               select KERNEL_JFFS2_FS_SECURITY
+               select PACKAGE_refpolicy
+               help
+                 This option enables the usage of SELinux labels
 endmenu
index e8c2cf7100d684a81347183f5fc4c8ae7c7ad70b..3a12db367658e630ad06522903ad360239f138e5 100644 (file)
@@ -234,13 +234,30 @@ endef
 $(eval $(foreach S,$(JFFS2_BLOCKSIZE),$(call Image/mkfs/jffs2/template,$(S))))
 $(eval $(foreach S,$(NAND_BLOCKSIZE),$(call Image/mkfs/jffs2-nand/template,$(S))))
 
-define Image/mkfs/squashfs
+define Image/mkfs/squashfs-common
        $(STAGING_DIR_HOST)/bin/mksquashfs4 $(call mkfs_target_dir,$(1)) $@ \
                -nopad -noappend -root-owned \
                -comp $(SQUASHFSCOMP) $(SQUASHFSOPT) \
                -processors 1
 endef
 
+ifeq ($(CONFIG_TARGET_ROOTFS_SECURITY_LABELS),y)
+define Image/mkfs/squashfs
+       echo "LD_LIBRARY_PATH=\$$LD_LIBRARY_PATH:$(STAGING_DIR_HOSTPKG)/lib" \
+            "$(STAGING_DIR_HOSTPKG)/sbin/setfiles -r" \
+            "$(call mkfs_target_dir,$(1))" \
+            "$(call mkfs_target_dir,$(1))/etc/selinux/targeted/contexts/files/file_contexts " \
+            "$(call mkfs_target_dir,$(1))" > $@.fakeroot-script
+       echo "$(Image/mkfs/squashfs-common)" >> $@.fakeroot-script
+       chmod +x $@.fakeroot-script
+       $(STAGING_DIR_HOST)/bin/fakeroot $@.fakeroot-script
+endef
+else
+define Image/mkfs/squashfs
+       $(call Image/mkfs/squashfs-common,$(1))
+endef
+endif
+
 # $(1): board name
 # $(2): rootfs type
 # $(3): kernel image