Unverified Commit 9186d472 authored by Konstantin Komarov's avatar Konstantin Komarov
Browse files

fs/ntfs3: In function ntfs_set_acl_ex do not change inode->i_mode if called...


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: be71b5cb ("fs/ntfs3: Add attrib operations")

Reviewed-by: default avatarJoe Perches <joe@perches.com>
Signed-off-by: default avatarKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
parent 3a2154b2
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -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 @@ static noinline int ntfs_set_acl_ex(struct user_namespace *mnt_userns,
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);
	}