]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
f2fs: fix out-of-repair __setattr_copy()
authorChao Yu <yuchao0@huawei.com>
Wed, 16 Dec 2020 09:15:23 +0000 (17:15 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 3 Mar 2021 15:44:23 +0000 (16:44 +0100)
commit 2562515f0ad7342bde6456602c491b64c63fe950 upstream.

__setattr_copy() was copied from setattr_copy() in fs/attr.c, there is
two missing patches doesn't cover this inner function, fix it.

Commit 7fa294c8991c ("userns: Allow chown and setgid preservation")
Commit 23adbe12ef7d ("fs,userns: Change inode_capable to capable_wrt_inode_uidgid")

Fixes: fbfa2cc58d53 ("f2fs: add file operations")
Cc: stable@vger.kernel.org
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/f2fs/file.c

index bee3bc7a16ac38362fc3e757855692977a029a08..09185ce2493c69a8babb6b66f3cd1c65c1c4d9a7 100644 (file)
@@ -666,7 +666,8 @@ static void __setattr_copy(struct inode *inode, const struct iattr *attr)
        if (ia_valid & ATTR_MODE) {
                umode_t mode = attr->ia_mode;
 
-               if (!in_group_p(inode->i_gid) && !capable(CAP_FSETID))
+               if (!in_group_p(inode->i_gid) &&
+                       !capable_wrt_inode_uidgid(inode, CAP_FSETID))
                        mode &= ~S_ISGID;
                set_acl_inode(fi, mode);
        }