chiark / gitweb /
selinux: Don't attempt to load policy in initramfs if it doesn't exist
authorColin Walters <walters@verbum.org>
Fri, 21 Feb 2014 02:29:00 +0000 (03:29 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 21 Feb 2014 02:30:18 +0000 (03:30 +0100)
Currently on at least Fedora, SELinux policy does not come in the
initramfs.  systemd will attempt to load *both* in the initramfs and
in the real root.

Now, the selinux_init_load_policy() API has a regular error return
value, as well as an "enforcing" boolean.  To determine enforcing
state, it looks for /etc/selinux/config as well as the presence of
"enforcing=" on the kernel command line.

Ordinarily, neither of those exist in the initramfs, so it will return
"unknown" for enforcing, and systemd will simply ignore the failure to
load policy.

src/core/selinux-setup.c

index 7a32ed59a0a8020c3f1b9431e119242eafc1d07d..9a5d6b2a9ddd655d3329c8d1a07f9e8e22740530 100644 (file)
@@ -58,6 +58,13 @@ int selinux_setup(bool *loaded_policy) {
        cb.func_log = null_log;
        selinux_set_callback(SELINUX_CB_LOG, cb);
 
+       /* Don't load policy in the initrd if we don't appear to have
+        * it.  For the real root, we check below if we've already
+        * loaded policy, and return gracefully.
+        */
+       if (in_initrd() && access(selinux_path(), F_OK) < 0)
+               return 0;
+
        /* Already initialized by somebody else? */
        r = getcon_raw(&con);
        if (r == 0) {