diff options
author | Jan Kara <jack@suse.cz> | 2016-09-19 11:39:09 -0400 |
---|---|---|
committer | Jan Kara <jack@suse.cz> | 2016-09-22 04:55:32 -0400 |
commit | 073931017b49d9458aa351605b43a7e34598caef (patch) | |
tree | 8c4374e82e5cad92bdb589e5be417f1a94870399 /fs/hfsplus | |
parent | 5d3ddd84eaefffd23c028bce5610dac8726f71c1 (diff) |
posix_acl: Clear SGID bit when setting file permissions
When file permissions are modified via chmod(2) and the user is not in
the owning group or capable of CAP_FSETID, the setgid bit is cleared in
inode_change_ok(). Setting a POSIX ACL via setxattr(2) sets the file
permissions as well as the new ACL, but doesn't clear the setgid bit in
a similar way; this allows to bypass the check in chmod(2). Fix that.
References: CVE-2016-7097
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Diffstat (limited to 'fs/hfsplus')
-rw-r--r-- | fs/hfsplus/posix_acl.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/hfsplus/posix_acl.c b/fs/hfsplus/posix_acl.c index ab7ea2506b4d..9b92058a1240 100644 --- a/fs/hfsplus/posix_acl.c +++ b/fs/hfsplus/posix_acl.c | |||
@@ -65,8 +65,8 @@ int hfsplus_set_posix_acl(struct inode *inode, struct posix_acl *acl, | |||
65 | case ACL_TYPE_ACCESS: | 65 | case ACL_TYPE_ACCESS: |
66 | xattr_name = XATTR_NAME_POSIX_ACL_ACCESS; | 66 | xattr_name = XATTR_NAME_POSIX_ACL_ACCESS; |
67 | if (acl) { | 67 | if (acl) { |
68 | err = posix_acl_equiv_mode(acl, &inode->i_mode); | 68 | err = posix_acl_update_mode(inode, &inode->i_mode, &acl); |
69 | if (err < 0) | 69 | if (err) |
70 | return err; | 70 | return err; |
71 | } | 71 | } |
72 | err = 0; | 72 | err = 0; |