From: Miklos Szeredi Date: Thu, 1 Sep 2016 09:11:59 +0000 (+0200) Subject: ovl: remove posix_acl_default from workdir X-Git-Tag: v4.1.12-108.0.20170806_1300~12 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=2966159ca25bbb432f8bba332552efddbd17aabf;p=users%2Fjedix%2Flinux-maple.git ovl: remove posix_acl_default from workdir Clear out posix acl xattrs on workdir and also reset the mode after creation so that an inherited sgid bit is cleared. Signed-off-by: Miklos Szeredi Cc: Orabug: 26401569 (backport upstream commit c11b9fdd6a612f376a5e886505f1c54c16d8c380) change inode_lock to mutex_lock to match the lock usage in the current kernel. Signed-off-by: Shan Hai Reviewed-by: Somasundaram Krishnasamy --- diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index 902119e0a9d03..7d6fbe73bd49d 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c @@ -701,6 +701,10 @@ retry: struct kstat stat = { .mode = S_IFDIR | 0, }; + struct iattr attr = { + .ia_valid = ATTR_MODE, + .ia_mode = stat.mode, + }; if (work->d_inode) { err = -EEXIST; @@ -716,6 +720,21 @@ retry: err = ovl_create_real(dir, work, &stat, NULL, NULL, true); if (err) goto out_dput; + + err = vfs_removexattr(work, XATTR_NAME_POSIX_ACL_DEFAULT); + if (err && err != -ENODATA) + goto out_dput; + + err = vfs_removexattr(work, XATTR_NAME_POSIX_ACL_ACCESS); + if (err && err != -ENODATA) + goto out_dput; + + /* Clear any inherited mode bits */ + mutex_lock(&work->d_inode->i_mutex); + err = notify_change(work, &attr, NULL); + mutex_unlock(&work->d_inode->i_mutex); + if (err) + goto out_dput; } out_unlock: mutex_unlock(&dir->i_mutex);