Commit 549d7b98 authored by Marc Dionne's avatar Marc Dionne Committed by Greg Kroah-Hartman

afs: Adjust mode bits processing


[ Upstream commit 627f4694 ]

Mode bits for an afs file should not be enforced in the usual
way.

For files, the absence of user bits can restrict file access
with respect to what is granted by the server.

These bits apply regardless of the owner or the current uid; the
rest of the mode bits (group, other) are ignored.
Signed-off-by: default avatarMarc Dionne <marc.dionne@auristor.com>
Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
Signed-off-by: default avatarSasha Levin <alexander.levin@verizon.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent bb7a7cd6
...@@ -340,17 +340,22 @@ int afs_permission(struct inode *inode, int mask) ...@@ -340,17 +340,22 @@ int afs_permission(struct inode *inode, int mask)
} else { } else {
if (!(access & AFS_ACE_LOOKUP)) if (!(access & AFS_ACE_LOOKUP))
goto permission_denied; goto permission_denied;
if ((mask & MAY_EXEC) && !(inode->i_mode & S_IXUSR))
goto permission_denied;
if (mask & (MAY_EXEC | MAY_READ)) { if (mask & (MAY_EXEC | MAY_READ)) {
if (!(access & AFS_ACE_READ)) if (!(access & AFS_ACE_READ))
goto permission_denied; goto permission_denied;
if (!(inode->i_mode & S_IRUSR))
goto permission_denied;
} else if (mask & MAY_WRITE) { } else if (mask & MAY_WRITE) {
if (!(access & AFS_ACE_WRITE)) if (!(access & AFS_ACE_WRITE))
goto permission_denied; goto permission_denied;
if (!(inode->i_mode & S_IWUSR))
goto permission_denied;
} }
} }
key_put(key); key_put(key);
ret = generic_permission(inode, mask);
_leave(" = %d", ret); _leave(" = %d", ret);
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment