]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
selinux: handle getcon_raw producing a NULL pointer, despite returning 0
authorAxel Rasmussen <axelrasmussen@google.com>
Thu, 23 Jul 2020 17:54:23 +0000 (10:54 -0700)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 24 Jul 2020 04:34:27 +0000 (13:34 +0900)
Previously, we assumed that success meant we definitely got a valid
pointer. There is at least one edge case where this is not true (i.e.,
we can get both a 0 return value, and *also* a NULL pointer):
https://github.com/SELinuxProject/selinux/blob/4246bb550dee5246c8567804325b7da206cd76cf/libselinux/src/procattr.c#L175

When this case occurrs, if we don't check the pointer we SIGSEGV in
early initialization.

src/core/selinux-setup.c

index b8a94a52ab6d21ca2bd844f83277c63eba297714..817069b3fe616e09ffa38516e1b591c205bfbbb2 100644 (file)
@@ -50,7 +50,8 @@ int mac_selinux_setup(bool *loaded_policy) {
 
         /* Already initialized by somebody else? */
         r = getcon_raw(&con);
-        if (r == 0) {
+        /* getcon_raw can return 0, and still give us a NULL pointer. */
+        if (r == 0 && con) {
                 initialized = !streq(con, "kernel");
                 freecon(con);
         }