mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 14:12:06 +00:00
fs/ntfs3: In function ntfs_set_acl_ex do not change inode->i_mode if called from function ntfs_init_acl
ntfs_init_acl sets mode. ntfs_init_acl calls ntfs_set_acl_ex.
ntfs_set_acl_ex must not change this mode.
Fixes xfstest generic/444
Fixes: be71b5cba2
("fs/ntfs3: Add attrib operations")
Reviewed-by: Joe Perches <joe@perches.com>
Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
This commit is contained in:
parent
3a2154b25a
commit
9186d472ee
@ -543,7 +543,7 @@ struct posix_acl *ntfs_get_acl(struct inode *inode, int type, bool rcu)
|
||||
|
||||
static noinline int ntfs_set_acl_ex(struct user_namespace *mnt_userns,
|
||||
struct inode *inode, struct posix_acl *acl,
|
||||
int type)
|
||||
int type, bool init_acl)
|
||||
{
|
||||
const char *name;
|
||||
size_t size, name_len;
|
||||
@ -556,8 +556,9 @@ static noinline int ntfs_set_acl_ex(struct user_namespace *mnt_userns,
|
||||
|
||||
switch (type) {
|
||||
case ACL_TYPE_ACCESS:
|
||||
if (acl) {
|
||||
umode_t mode = inode->i_mode;
|
||||
/* Do not change i_mode if we are in init_acl */
|
||||
if (acl && !init_acl) {
|
||||
umode_t mode;
|
||||
|
||||
err = posix_acl_update_mode(mnt_userns, inode, &mode,
|
||||
&acl);
|
||||
@ -618,7 +619,7 @@ out:
|
||||
int ntfs_set_acl(struct user_namespace *mnt_userns, struct inode *inode,
|
||||
struct posix_acl *acl, int type)
|
||||
{
|
||||
return ntfs_set_acl_ex(mnt_userns, inode, acl, type);
|
||||
return ntfs_set_acl_ex(mnt_userns, inode, acl, type, false);
|
||||
}
|
||||
|
||||
static int ntfs_xattr_get_acl(struct user_namespace *mnt_userns,
|
||||
@ -699,7 +700,7 @@ int ntfs_init_acl(struct user_namespace *mnt_userns, struct inode *inode,
|
||||
|
||||
if (default_acl) {
|
||||
err = ntfs_set_acl_ex(mnt_userns, inode, default_acl,
|
||||
ACL_TYPE_DEFAULT);
|
||||
ACL_TYPE_DEFAULT, true);
|
||||
posix_acl_release(default_acl);
|
||||
} else {
|
||||
inode->i_default_acl = NULL;
|
||||
@ -710,7 +711,7 @@ int ntfs_init_acl(struct user_namespace *mnt_userns, struct inode *inode,
|
||||
else {
|
||||
if (!err)
|
||||
err = ntfs_set_acl_ex(mnt_userns, inode, acl,
|
||||
ACL_TYPE_ACCESS);
|
||||
ACL_TYPE_ACCESS, true);
|
||||
posix_acl_release(acl);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user