From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Christian Brauner <christian.brauner@ubuntu.com>
Cc: "David S. Miller" <davem@davemloft.net>,
linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
"Rafael J. Wysocki" <rafael@kernel.org>,
Pavel Machek <pavel@ucw.cz>, Jakub Kicinski <kuba@kernel.org>,
Eric Dumazet <edumazet@google.com>,
Stephen Hemminger <stephen@networkplumber.org>,
linux-pm@vger.kernel.org
Subject: Re: [PATCH net-next 05/10] sysfs: add sysfs_change_owner()
Date: Wed, 12 Feb 2020 08:04:02 -0800 [thread overview]
Message-ID: <20200212160402.GA1799124@kroah.com> (raw)
In-Reply-To: <20200212150743.zyubvz53unyevbkx@wittgenstein>
On Wed, Feb 12, 2020 at 04:07:43PM +0100, Christian Brauner wrote:
> On Wed, Feb 12, 2020 at 05:18:08AM -0800, Greg Kroah-Hartman wrote:
> > On Wed, Feb 12, 2020 at 11:43:16AM +0100, Christian Brauner wrote:
> > > Add a helper to change the owner of sysfs objects.
> >
> > Seems sane, but:
> >
> > > The ownership of a sysfs object is determined based on the ownership of
> > > the corresponding kobject, i.e. only if the ownership of a kobject is
> > > changed will this function change the ownership of the corresponding
> > > sysfs entry.
> >
> > A "sysfs object" is a kobject. So I don't understand this sentance,
> > sorry.
>
> I meant that only if you change the uid/gid the underlying kobject is
> associated with will this function do anything, meaning that you can't
> pass in uids/gids directly. I'll explain why I did this down below [1].
> Sorry if that was confusing.
>
> >
> > > This function will be used to correctly account for kobject ownership
> > > changes, e.g. when moving network devices between network namespaces.
> > >
> > > Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
> > > ---
> > > fs/sysfs/file.c | 35 +++++++++++++++++++++++++++++++++++
> > > include/linux/sysfs.h | 6 ++++++
> > > 2 files changed, 41 insertions(+)
> > >
> > > diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c
> > > index 6239d9584f0b..6a0fe88061fd 100644
> > > --- a/fs/sysfs/file.c
> > > +++ b/fs/sysfs/file.c
> > > @@ -642,3 +642,38 @@ int sysfs_file_change_owner(struct kobject *kobj, const char *name)
> > > return error;
> > > }
> > > EXPORT_SYMBOL_GPL(sysfs_file_change_owner);
> > > +
> > > +/**
> > > + * sysfs_change_owner - change owner of the given object.
> > > + * @kobj: object.
> > > + */
> > > +int sysfs_change_owner(struct kobject *kobj)
> >
> > What does this change the owner of the given object _to_?
>
> [1]:
> So ownership only changes if the kobject's uid/gid have been changed.
> So when to stick with the networking example, when a network device is
> moved into a new network namespace, the uid/gid of the kobject will be
> changed to the root user of the owning user namespace of that network
> namespace. So when the move of the network device has completed and
> kobject_get_ownership() is called it will now return a different
> uid/gid.
Ok, then this needs to say "change the uid/gid of the kobject to..." in
order to explain what it is now being set to. Otherwise this is really
confusing if you only read the kerneldoc, right?
> So my reasoning was that ownership is determined dynamically that way. I
> guess what you're hinting at is that we could simply add uid_t uid,
> gid_t gid arguments to these sysfs helpers. That's fine with me too.
It's fine if you want to set it to the "root owner", just say that
somewhere :)
> It
> means that callers are responsible to either retrieve the ownership from
> the kobject (in case it was changed through another call) or the call to
> syfs_change_owner(kobj, uid, gid) sets the new owner of the kobject. I
> don't know what the best approach is. Maybe a hybrid whereby we allow
> passing in uid/gid but also allow passing in ({g,u}id_t - 1) to indicate
> that we want the ownership to be taken from the kobject itself (e.g.
> when a network device has been updated by dev_change_net_namespace()).
>
> >
> > > +{
> > > + int error;
> > > + const struct kobj_type *ktype;
> > > +
> > > + if (!kobj->state_in_sysfs)
> > > + return -EINVAL;
> > > +
> > > + error = sysfs_file_change_owner(kobj, NULL);
> >
> > It passes NULL?
>
> Which means, change the ownership of "kobj" itself and not lookup a file
> relative to "kobj".
Ok, that's totally not obvious at all :(
Better naming please, I know it's hard, but it matters.
thanks,
greg k-h
next prev parent reply other threads:[~2020-02-12 16:04 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-12 10:43 [PATCH net-next 00/10] net: fix sysfs permssions when device changes network Christian Brauner
2020-02-12 10:43 ` [PATCH net-next 01/10] sysfs: add sysfs_file_change_owner() Christian Brauner
2020-02-12 13:19 ` Greg Kroah-Hartman
2020-02-12 10:43 ` [PATCH net-next 02/10] sysfs: add sysfs_link_change_owner() Christian Brauner
2020-02-12 10:43 ` [PATCH net-next 03/10] sysfs: add sysfs_group_change_owner() Christian Brauner
2020-02-12 10:43 ` [PATCH net-next 04/10] sysfs: add sysfs_groups_change_owner() Christian Brauner
2020-02-12 10:43 ` [PATCH net-next 05/10] sysfs: add sysfs_change_owner() Christian Brauner
2020-02-12 13:18 ` Greg Kroah-Hartman
2020-02-12 15:07 ` Christian Brauner
2020-02-12 16:04 ` Greg Kroah-Hartman [this message]
2020-02-12 10:43 ` [PATCH net-next 06/10] device: add device_change_owner() Christian Brauner
2020-02-12 10:43 ` [PATCH net-next 07/10] drivers/base/power: add dpm_sysfs_change_owner() Christian Brauner
2020-02-12 10:52 ` Rafael J. Wysocki
2020-02-12 10:43 ` [PATCH net-next 08/10] net-sysfs: add netdev_change_owner() Christian Brauner
2020-02-12 10:43 ` [PATCH net-next 09/10] net-sysfs: add queue_change_owner() Christian Brauner
2020-02-12 10:43 ` [PATCH net-next 10/10] net: fix sysfs permssions when device changes network namespace Christian Brauner
2020-02-12 17:53 ` [PATCH net-next 00/10] net: fix sysfs permssions when device changes network David Miller
2020-02-12 18:00 ` Christian Brauner
2020-02-12 18:16 ` David Miller
2020-02-12 18:20 ` Christian Brauner
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=20200212160402.GA1799124@kroah.com \
--to=gregkh@linuxfoundation.org \
--cc=christian.brauner@ubuntu.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pavel@ucw.cz \
--cc=rafael@kernel.org \
--cc=stephen@networkplumber.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.