lkml.org 
[lkml]   [2022]   [Jun]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 024/667] fs/ntfs3: In function ntfs_set_acl_ex do not change inode->i_mode if called from function ntfs_init_acl
    Date
    From: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>

    commit 9186d472ee780fabf74424756c4c00545166157e upstream.

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

    Reviewed-by: Joe Perches <joe@perches.com>
    Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    fs/ntfs3/xattr.c | 13 +++++++------
    1 file changed, 7 insertions(+), 6 deletions(-)

    --- a/fs/ntfs3/xattr.c
    +++ b/fs/ntfs3/xattr.c
    @@ -541,7 +541,7 @@ struct posix_acl *ntfs_get_acl(struct in

    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;
    @@ -554,8 +554,9 @@ static noinline int ntfs_set_acl_ex(stru

    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);
    @@ -616,7 +617,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);
    }

    /*
    @@ -636,7 +637,7 @@ int ntfs_init_acl(struct user_namespace

    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;
    @@ -647,7 +648,7 @@ int ntfs_init_acl(struct user_namespace
    else {
    if (!err)
    err = ntfs_set_acl_ex(mnt_userns, inode, acl,
    - ACL_TYPE_ACCESS);
    + ACL_TYPE_ACCESS, true);
    posix_acl_release(acl);
    }


    \
     
     \ /
      Last update: 2022-06-07 20:19    [W:4.085 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site