]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
selinux: add the processing of the failure of avc_add_xperms_decision()
authorZhen Lei <thunder.leizhen@huawei.com>
Wed, 7 Aug 2024 09:00:56 +0000 (17:00 +0800)
committerPaul Moore <paul@paul-moore.com>
Wed, 7 Aug 2024 19:14:36 +0000 (15:14 -0400)
When avc_add_xperms_decision() fails, the information recorded by the new
avc node is incomplete. In this case, the new avc node should be released
instead of replacing the old avc node.

Cc: stable@vger.kernel.org
Fixes: fa1aa143ac4a ("selinux: extended permissions for ioctls")
Suggested-by: Stephen Smalley <stephen.smalley.work@gmail.com>
Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com>
Acked-by: Stephen Smalley <stephen.smalley.work@gmail.com>
Signed-off-by: Paul Moore <paul@paul-moore.com>
security/selinux/avc.c

index 7087cd2b802d8d86599cbec57f0bbc9ce846ec89..b49c44869dc462720bc9110f4a3aa895edb06537 100644 (file)
@@ -907,7 +907,11 @@ static int avc_update_node(u32 event, u32 perms, u8 driver, u8 xperm, u32 ssid,
                node->ae.avd.auditdeny &= ~perms;
                break;
        case AVC_CALLBACK_ADD_XPERMS:
-               avc_add_xperms_decision(node, xpd);
+               rc = avc_add_xperms_decision(node, xpd);
+               if (rc) {
+                       avc_node_kill(node);
+                       goto out_unlock;
+               }
                break;
        }
        avc_node_replace(node, orig);