From 199a892218e1f36e7bd7d5da2d78de6b13f04488 Mon Sep 17 00:00:00 2001 From: Axel Rasmussen Date: Thu, 23 Jul 2020 10:54:23 -0700 Subject: [PATCH] selinux: handle getcon_raw producing a NULL pointer, despite returning 0 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 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/core/selinux-setup.c b/src/core/selinux-setup.c index b8a94a52ab..817069b3fe 100644 --- a/src/core/selinux-setup.c +++ b/src/core/selinux-setup.c @@ -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); }