|
|
9fc0f6 |
From 4083e4d76b61bc9eb40583f941412c1ea1a0285b Mon Sep 17 00:00:00 2001
|
|
|
9fc0f6 |
From: Colin Walters <walters@verbum.org>
|
|
|
9fc0f6 |
Date: Fri, 21 Feb 2014 03:29:00 +0100
|
|
|
9fc0f6 |
Subject: [PATCH] selinux: Don't attempt to load policy in initramfs if it
|
|
|
9fc0f6 |
doesn't exist
|
|
|
9fc0f6 |
|
|
|
9fc0f6 |
Currently on at least Fedora, SELinux policy does not come in the
|
|
|
9fc0f6 |
initramfs. systemd will attempt to load *both* in the initramfs and
|
|
|
9fc0f6 |
in the real root.
|
|
|
9fc0f6 |
|
|
|
9fc0f6 |
Now, the selinux_init_load_policy() API has a regular error return
|
|
|
9fc0f6 |
value, as well as an "enforcing" boolean. To determine enforcing
|
|
|
9fc0f6 |
state, it looks for /etc/selinux/config as well as the presence of
|
|
|
9fc0f6 |
"enforcing=" on the kernel command line.
|
|
|
9fc0f6 |
|
|
|
9fc0f6 |
Ordinarily, neither of those exist in the initramfs, so it will return
|
|
|
9fc0f6 |
"unknown" for enforcing, and systemd will simply ignore the failure to
|
|
|
9fc0f6 |
load policy.
|
|
|
9fc0f6 |
---
|
|
|
9fc0f6 |
src/core/selinux-setup.c | 7 +++++++
|
|
|
9fc0f6 |
1 file changed, 7 insertions(+)
|
|
|
9fc0f6 |
|
|
|
9fc0f6 |
diff --git a/src/core/selinux-setup.c b/src/core/selinux-setup.c
|
|
|
9fc0f6 |
index 7a32ed5..9a5d6b2 100644
|
|
|
9fc0f6 |
--- a/src/core/selinux-setup.c
|
|
|
9fc0f6 |
+++ b/src/core/selinux-setup.c
|
|
|
9fc0f6 |
@@ -58,6 +58,13 @@ int selinux_setup(bool *loaded_policy) {
|
|
|
9fc0f6 |
cb.func_log = null_log;
|
|
|
9fc0f6 |
selinux_set_callback(SELINUX_CB_LOG, cb);
|
|
|
9fc0f6 |
|
|
|
9fc0f6 |
+ /* Don't load policy in the initrd if we don't appear to have
|
|
|
9fc0f6 |
+ * it. For the real root, we check below if we've already
|
|
|
9fc0f6 |
+ * loaded policy, and return gracefully.
|
|
|
9fc0f6 |
+ */
|
|
|
9fc0f6 |
+ if (in_initrd() && access(selinux_path(), F_OK) < 0)
|
|
|
9fc0f6 |
+ return 0;
|
|
|
9fc0f6 |
+
|
|
|
9fc0f6 |
/* Already initialized by somebody else? */
|
|
|
9fc0f6 |
r = getcon_raw(&con);
|
|
|
9fc0f6 |
if (r == 0) {
|