2022-04-20 02:55:33

by Yang Xu (Fujitsu)

[permalink] [raw]
Subject: [PATCH v4 8/8] ceph: Remove S_ISGID clear code in ceph_finish_async_create

Since vfs has stripped S_ISGID in the previous patch, the calltrace
as below:

vfs: lookup_open
...
if (open_flag & O_CREAT) {
if (open_flag & O_EXCL)
open_flag &= ~O_TRUNC;
prepare_mode(mnt_userns, dir->d_inode, &mode);
...
dir_inode->i_op->atomic_open

ceph: ceph_atomic_open
...
if (flags & O_CREAT)
ceph_finish_async_create

We have stripped sgid and umask in prepare mode, so remove this useless
code here.

Signed-off-by: Yang Xu <[email protected]>
---
fs/ceph/file.c | 4 ----
1 file changed, 4 deletions(-)

diff --git a/fs/ceph/file.c b/fs/ceph/file.c
index 6c9e837aa1d3..8e3b99853333 100644
--- a/fs/ceph/file.c
+++ b/fs/ceph/file.c
@@ -651,10 +651,6 @@ static int ceph_finish_async_create(struct inode *dir, struct dentry *dentry,
/* Directories always inherit the setgid bit. */
if (S_ISDIR(mode))
mode |= S_ISGID;
- else if ((mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP) &&
- !in_group_p(dir->i_gid) &&
- !capable_wrt_inode_uidgid(&init_user_ns, dir, CAP_FSETID))
- mode &= ~S_ISGID;
} else {
in.gid = cpu_to_le32(from_kgid(&init_user_ns, current_fsgid()));
}
--
2.27.0