From: Al Viro <viro@zeniv.linux.org.uk>
To: Yang Xu <xuyang2018.jy@fujitsu.com>
Cc: linux-fsdevel@vger.kernel.org, ceph-devel@vger.kernel.org,
david@fromorbit.com, djwong@kernel.org, brauner@kernel.org,
willy@infradead.org, jlayton@kernel.org,
Linus Torvalds <torvalds@linux-foundation.org>,
Jann Horn <jannh@google.com>
Subject: Re: [PATCH v8 1/4] fs: add mode_strip_sgid() helper
Date: Thu, 28 Apr 2022 01:59:01 +0000 [thread overview]
Message-ID: <Ymn05eNgOnaYy36R@zeniv-ca.linux.org.uk> (raw)
In-Reply-To: <1650971490-4532-1-git-send-email-xuyang2018.jy@fujitsu.com>
On Tue, Apr 26, 2022 at 07:11:27PM +0800, Yang Xu wrote:
> Add a dedicated helper to handle the setgid bit when creating a new file
> in a setgid directory. This is a preparatory patch for moving setgid
> stripping into the vfs. The patch contains no functional changes.
>
> Currently the setgid stripping logic is open-coded directly in
> inode_init_owner() and the individual filesystems are responsible for
> handling setgid inheritance. Since this has proven to be brittle as
> evidenced by old issues we uncovered over the last months (see [1] to
> [3] below) we will try to move this logic into the vfs.
First of all, inode_init_owner() is (and always had been) an optional helper.
Filesystems are *NOT* required to call it, so putting any common functionality
in there had always been a mistake.
That goes for inode_fsuid_set() and inode_fsgid_set() calls as well.
Consider e.g. this:
struct inode *ext2_new_inode(struct inode *dir, umode_t mode,
const struct qstr *qstr)
{
...
if (test_opt(sb, GRPID)) {
inode->i_mode = mode;
inode->i_uid = current_fsuid();
inode->i_gid = dir->i_gid;
} else
inode_init_owner(&init_user_ns, inode, dir, mode);
Here we have an explicit mount option, selecting the way S_ISGID on directories
is handled. Mount ext2 with -o grpid and see for yourself - no inode_init_owner()
calls there.
The same goes for ext4 - that code is copied there unchanged.
What's more, I'm not sure that Jann's fix made any sense in the first place.
After all, the file being created here is empty; exec on it won't give you
anything - it'll simply fail. And modifying that file ought to strip SGID,
or we have much more interesting problems.
What am I missing here?
next prev parent reply other threads:[~2022-04-28 1:59 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-26 11:11 [PATCH v8 1/4] fs: add mode_strip_sgid() helper Yang Xu
2022-04-26 11:11 ` [PATCH v8 2/4] fs: Add missing umask strip in vfs_tmpfile Yang Xu
2022-04-26 11:11 ` [PATCH v8 3/4] fs: move S_ISGID stripping into the vfs Yang Xu
2022-04-26 10:38 ` Christian Brauner
2022-04-26 11:20 ` Amir Goldstein
2022-04-26 11:52 ` Miklos Szeredi
2022-04-26 14:53 ` Christian Brauner
2022-04-27 9:22 ` Christian Brauner
2022-04-28 4:45 ` Al Viro
2022-04-28 8:07 ` Christian Brauner
2022-04-26 15:52 ` Christian Brauner
2022-04-27 1:21 ` xuyang2018.jy
2022-04-26 11:11 ` [PATCH v8 4/4] ceph: rely on vfs for setgid stripping Yang Xu
2022-04-26 14:52 ` [PATCH v8 1/4] fs: add mode_strip_sgid() helper Jeff Layton
2022-04-27 1:34 ` xuyang2018.jy
2022-04-28 1:59 ` Al Viro [this message]
2022-04-28 2:15 ` Al Viro
2022-04-28 2:23 ` xuyang2018.jy
2022-04-28 2:49 ` Al Viro
2022-04-28 3:12 ` Al Viro
2022-04-28 3:46 ` Al Viro
2022-04-28 9:34 ` Christian Brauner
2022-05-19 1:03 ` xuyang2018.jy
2022-05-19 9:14 ` Christian Brauner
2022-04-28 8:06 ` Jann Horn
2022-04-28 8:44 ` Christian Brauner
2022-04-28 11:55 ` Christian Brauner
2022-04-28 8:25 ` Christian Brauner
2022-04-28 4:40 ` Al Viro
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Ymn05eNgOnaYy36R@zeniv-ca.linux.org.uk \
--to=viro@zeniv.linux.org.uk \
--cc=brauner@kernel.org \
--cc=ceph-devel@vger.kernel.org \
--cc=david@fromorbit.com \
--cc=djwong@kernel.org \
--cc=jannh@google.com \
--cc=jlayton@kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
--cc=willy@infradead.org \
--cc=xuyang2018.jy@fujitsu.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.