aboutsummaryrefslogtreecommitdiffstats
path: root/fs/hfsplus
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2016-09-19 11:39:09 -0400
committerJan Kara <jack@suse.cz>2016-09-22 04:55:32 -0400
commit073931017b49d9458aa351605b43a7e34598caef (patch)
tree8c4374e82e5cad92bdb589e5be417f1a94870399 /fs/hfsplus
parent5d3ddd84eaefffd23c028bce5610dac8726f71c1 (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.c4
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;