From: Bagas Sanjaya <bagasdotme@gmail.com>
To: Max Kellermann <max.kellermann@ionos.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Tejun Heo <tj@kernel.org>, Zefan Li <lizefan.x@bytedance.com>,
Johannes Weiner <hannes@cmpxchg.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Linux CGroups <cgroups@vger.kernel.org>
Subject: Re: [PATCH v2 1/2] kernel/cgroup: use kernfs_create_dir_ns()
Date: Thu, 21 Dec 2023 13:56:36 +0700 [thread overview]
Message-ID: <ZYPhpKOewFkYIDFL@archie.me> (raw)
In-Reply-To: <20231208093310.297233-1-max.kellermann@ionos.com>
[-- Attachment #1: Type: text/plain, Size: 3552 bytes --]
On Fri, Dec 08, 2023 at 10:33:09AM +0100, Max Kellermann wrote:
> By passing the fsugid to kernfs_create_dir_ns(), we don't need
> cgroup_kn_set_ugid() any longer. That function was added for exactly
> this purpose by commit 49957f8e2a43 ("cgroup: newly created dirs and
> files should be owned by the creator").
>
> Eliminating this piece of duplicate code means we benefit from future
> improvements to kernfs_create_dir_ns(); for example, both are lacking
> S_ISGID support currently, which my next patch will add to
> kernfs_create_dir_ns(). It cannot (easily) be added to
> cgroup_kn_set_ugid() because we can't dereference struct kernfs_iattrs
> from there.
>
> Signed-off-by: Max Kellermann <max.kellermann@ionos.com>
> Acked-by: Tejun Heo <tj@kernel.org>
> --
> v1 -> v2: 12-digit commit id
> ---
> kernel/cgroup/cgroup.c | 31 ++++---------------------------
> 1 file changed, 4 insertions(+), 27 deletions(-)
>
> diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
> index 4b9ff41ca603..a844b421fd83 100644
> --- a/kernel/cgroup/cgroup.c
> +++ b/kernel/cgroup/cgroup.c
> @@ -4169,20 +4169,6 @@ static struct kernfs_ops cgroup_kf_ops = {
> .seq_show = cgroup_seqfile_show,
> };
>
> -/* set uid and gid of cgroup dirs and files to that of the creator */
> -static int cgroup_kn_set_ugid(struct kernfs_node *kn)
> -{
> - struct iattr iattr = { .ia_valid = ATTR_UID | ATTR_GID,
> - .ia_uid = current_fsuid(),
> - .ia_gid = current_fsgid(), };
> -
> - if (uid_eq(iattr.ia_uid, GLOBAL_ROOT_UID) &&
> - gid_eq(iattr.ia_gid, GLOBAL_ROOT_GID))
> - return 0;
> -
> - return kernfs_setattr(kn, &iattr);
> -}
> -
> static void cgroup_file_notify_timer(struct timer_list *timer)
> {
> cgroup_file_notify(container_of(timer, struct cgroup_file,
> @@ -4195,25 +4181,18 @@ static int cgroup_add_file(struct cgroup_subsys_state *css, struct cgroup *cgrp,
> char name[CGROUP_FILE_NAME_MAX];
> struct kernfs_node *kn;
> struct lock_class_key *key = NULL;
> - int ret;
>
> #ifdef CONFIG_DEBUG_LOCK_ALLOC
> key = &cft->lockdep_key;
> #endif
> kn = __kernfs_create_file(cgrp->kn, cgroup_file_name(cgrp, cft, name),
> cgroup_file_mode(cft),
> - GLOBAL_ROOT_UID, GLOBAL_ROOT_GID,
> + current_fsuid(), current_fsgid(),
> 0, cft->kf_ops, cft,
> NULL, key);
> if (IS_ERR(kn))
> return PTR_ERR(kn);
>
> - ret = cgroup_kn_set_ugid(kn);
> - if (ret) {
> - kernfs_remove(kn);
> - return ret;
> - }
> -
> if (cft->file_offset) {
> struct cgroup_file *cfile = (void *)css + cft->file_offset;
>
> @@ -5616,7 +5595,9 @@ static struct cgroup *cgroup_create(struct cgroup *parent, const char *name,
> goto out_cancel_ref;
>
> /* create the directory */
> - kn = kernfs_create_dir(parent->kn, name, mode, cgrp);
> + kn = kernfs_create_dir_ns(parent->kn, name, mode,
> + current_fsuid(), current_fsgid(),
> + cgrp, NULL);
> if (IS_ERR(kn)) {
> ret = PTR_ERR(kn);
> goto out_stat_exit;
> @@ -5761,10 +5742,6 @@ int cgroup_mkdir(struct kernfs_node *parent_kn, const char *name, umode_t mode)
> */
> kernfs_get(cgrp->kn);
>
> - ret = cgroup_kn_set_ugid(cgrp->kn);
> - if (ret)
> - goto out_destroy;
> -
> ret = css_populate_dir(&cgrp->self);
> if (ret)
> goto out_destroy;
No noticeable regressions with this patch applied.
Tested-by: Bagas Sanjaya <bagasdotme@gmail.com>
--
An old man doll... just what I always wanted! - Clara
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
next prev parent reply other threads:[~2023-12-21 6:56 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-08 9:33 [PATCH v2 1/2] kernel/cgroup: use kernfs_create_dir_ns() Max Kellermann
2023-12-08 9:33 ` [PATCH v2 2/2] fs/kernfs/dir: obey S_ISGID Max Kellermann
2023-12-21 6:57 ` Bagas Sanjaya
2023-12-20 16:33 ` [PATCH v2 1/2] kernel/cgroup: use kernfs_create_dir_ns() Michal Koutný
2023-12-21 6:56 ` Bagas Sanjaya [this message]
2023-12-21 21:29 ` Tejun Heo
2023-12-22 6:15 ` Greg Kroah-Hartman
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=ZYPhpKOewFkYIDFL@archie.me \
--to=bagasdotme@gmail.com \
--cc=cgroups@vger.kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=hannes@cmpxchg.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lizefan.x@bytedance.com \
--cc=max.kellermann@ionos.com \
--cc=tj@kernel.org \
/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.