selinux: when dropping capabilities only include AUDIT caps if we have them
authorLennart Poettering <lennart@poettering.net>
Sun, 22 Apr 2012 22:32:43 +0000 (00:32 +0200)
committerSimon McVittie <simon.mcvittie@collabora.co.uk>
Fri, 13 Sep 2013 13:24:19 +0000 (14:24 +0100)
When we drop capabilities we shouldn't assume we can keep
CAP_AUDIT_WRITE unconditionally, since it will not be available when
running in containers.

This patch only adds CAP_AUDIT_WRITE to the list of caps we keep if we
actually have it in the first place.

This makes audit/selinux enabled D-Bus work in a Linux container.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=49062
Acked-by: Thiago Macieira <thiago@kde.org>
Acked-by: Colin Walters <walters@verbum.org>
Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
bus/selinux.c

index c36c94e..7ae84d6 100644 (file)
@@ -1045,8 +1045,9 @@ _dbus_change_to_daemon_user  (const char    *user,
       int rc;
 
       capng_clear (CAPNG_SELECT_BOTH);
-      capng_update (CAPNG_ADD, CAPNG_EFFECTIVE | CAPNG_PERMITTED,
-                    CAP_AUDIT_WRITE);
+      if (capng_have_capability (CAPNG_PERMITTED, CAP_AUDIT_WRITE))
+        capng_update (CAPNG_ADD, CAPNG_EFFECTIVE | CAPNG_PERMITTED,
+                      CAP_AUDIT_WRITE);
       rc = capng_change_id (uid, gid, CAPNG_DROP_SUPP_GRP);
       if (rc)
         {