[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1712969764-31039-6-git-send-email-wufan@linux.microsoft.com>
Date: Fri, 12 Apr 2024 17:55:48 -0700
From: Fan Wu <wufan@...ux.microsoft.com>
To: corbet@....net,
zohar@...ux.ibm.com,
jmorris@...ei.org,
serge@...lyn.com,
tytso@....edu,
ebiggers@...nel.org,
axboe@...nel.dk,
agk@...hat.com,
snitzer@...nel.org,
eparis@...hat.com,
paul@...l-moore.com
Cc: linux-doc@...r.kernel.org,
linux-integrity@...r.kernel.org,
linux-security-module@...r.kernel.org,
fsverity@...ts.linux.dev,
linux-block@...r.kernel.org,
dm-devel@...ts.linux.dev,
audit@...r.kernel.org,
linux-kernel@...r.kernel.org,
Fan Wu <wufan@...ux.microsoft.com>
Subject: [PATCH v17 05/21] initramfs|security: Add a security hook to do_populate_rootfs()
This patch introduces a new hook to notify security system that the
content of initramfs has been unpacked into the rootfs.
Upon receiving this notification, the security system can activate
a policy to allow only files that originated from the initramfs to
execute or load into kernel during the early stages of booting.
This approach is crucial for minimizing the attack surface by
ensuring that only trusted files from the initramfs are operational
in the critical boot phase.
Signed-off-by: Fan Wu <wufan@...ux.microsoft.com>
---
v1-v11:
+ Not present
v12:
+ Introduced
v13:
+ Rename the hook name to initramfs_populated()
v14:
+ No changes
v15:
+ No changes
v16:
+ No changes
v17:
+ Fix ocumentation style issues
---
include/linux/lsm_hook_defs.h | 2 ++
include/linux/security.h | 8 ++++++++
init/initramfs.c | 3 +++
security/security.c | 10 ++++++++++
4 files changed, 23 insertions(+)
diff --git a/include/linux/lsm_hook_defs.h b/include/linux/lsm_hook_defs.h
index 334e00efbde4..7db99ae75651 100644
--- a/include/linux/lsm_hook_defs.h
+++ b/include/linux/lsm_hook_defs.h
@@ -450,3 +450,5 @@ LSM_HOOK(int, 0, uring_override_creds, const struct cred *new)
LSM_HOOK(int, 0, uring_sqpoll, void)
LSM_HOOK(int, 0, uring_cmd, struct io_uring_cmd *ioucmd)
#endif /* CONFIG_IO_URING */
+
+LSM_HOOK(void, LSM_RET_VOID, initramfs_populated, void)
diff --git a/include/linux/security.h b/include/linux/security.h
index 41a8f667bdfa..14fff542f2e3 100644
--- a/include/linux/security.h
+++ b/include/linux/security.h
@@ -2255,4 +2255,12 @@ static inline int security_uring_cmd(struct io_uring_cmd *ioucmd)
#endif /* CONFIG_SECURITY */
#endif /* CONFIG_IO_URING */
+#ifdef CONFIG_SECURITY
+extern void security_initramfs_populated(void);
+#else
+static inline void security_initramfs_populated(void)
+{
+}
+#endif /* CONFIG_SECURITY */
+
#endif /* ! __LINUX_SECURITY_H */
diff --git a/init/initramfs.c b/init/initramfs.c
index a298a3854a80..feedb47d0f55 100644
--- a/init/initramfs.c
+++ b/init/initramfs.c
@@ -17,6 +17,7 @@
#include <linux/namei.h>
#include <linux/init_syscalls.h>
#include <linux/umh.h>
+#include <linux/security.h>
#include "do_mounts.h"
@@ -719,6 +720,8 @@ static void __init do_populate_rootfs(void *unused, async_cookie_t cookie)
#endif
}
+ security_initramfs_populated();
+
done:
/*
* If the initrd region is overlapped with crashkernel reserved region,
diff --git a/security/security.c b/security/security.c
index 820e0d437452..0db5a6b32aab 100644
--- a/security/security.c
+++ b/security/security.c
@@ -5675,3 +5675,13 @@ int security_uring_cmd(struct io_uring_cmd *ioucmd)
return call_int_hook(uring_cmd, ioucmd);
}
#endif /* CONFIG_IO_URING */
+
+/**
+ * security_initramfs_populated() - Notify LSMs that initramfs has been loaded
+ *
+ * Tells the LSMs the initramfs has been unpacked into the rootfs.
+ */
+void security_initramfs_populated(void)
+{
+ call_void_hook(initramfs_populated);
+}
--
2.44.0
Powered by blists - more mailing lists