Merge branch 'mount.part1' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[platform/kernel/linux-rpi.git] / security / smack / smack_lsm.c
index 24a00d9..430d4f3 100644 (file)
@@ -4249,6 +4249,12 @@ static int smack_key_permission(key_ref_t key_ref,
        int request = 0;
        int rc;
 
+       /*
+        * Validate requested permissions
+        */
+       if (perm & ~KEY_NEED_ALL)
+               return -EINVAL;
+
        keyp = key_ref_to_ptr(key_ref);
        if (keyp == NULL)
                return -EINVAL;
@@ -4272,10 +4278,10 @@ static int smack_key_permission(key_ref_t key_ref,
        ad.a.u.key_struct.key = keyp->serial;
        ad.a.u.key_struct.key_desc = keyp->description;
 #endif
-       if (perm & KEY_NEED_READ)
-               request = MAY_READ;
+       if (perm & (KEY_NEED_READ | KEY_NEED_SEARCH | KEY_NEED_VIEW))
+               request |= MAY_READ;
        if (perm & (KEY_NEED_WRITE | KEY_NEED_LINK | KEY_NEED_SETATTR))
-               request = MAY_WRITE;
+               request |= MAY_WRITE;
        rc = smk_access(tkp, keyp->security, request, &ad);
        rc = smk_bu_note("key access", tkp, keyp->security, request, rc);
        return rc;