From: Dongsu Park <dpark@posteo.net>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org,
Peter Hurley <peter@hurleysoftware.com>,
Josh Triplett <josh@joshtriplett.org>,
Al Viro <viro@zeniv.linux.org.uk>,
David Howells <dhowells@redhat.com>,
Alban Crequy <alban@endocode.com>
Subject: Re: [PATCH v2] devpts: allow mounting with uid/gid of uint32_t
Date: Wed, 19 Aug 2015 09:24:31 +0200 [thread overview]
Message-ID: <20150819072431.GA2642@posteo.de> (raw)
In-Reply-To: <20150818164425.76b9df40f94bbd2a57d0d518@linux-foundation.org>
Hi,
thanks for the review.
On 18.08.2015 16:44, Andrew Morton wrote:
> On Tue, 18 Aug 2015 17:18:19 +0200 Dongsu Park <dpark@posteo.net> wrote:
>
> > To allow devpts to be mounted with options of uid/gid of uint32_t,
> > use kstrtouint() instead of match_int(). Doing that, mounting devpts
> > with uid or gid > (2^31 - 1) will work as expected, e.g.:
> >
> > # mount -t devpts devpts /tmp/devptsdir -o \
> > newinstance,ptmxmode=0666,mode=620,uid=3598450688,gid=3598450693
> >
> > It was originally by reported on systemd github issues:
> > https://github.com/systemd/systemd/issues/956
> >
> > --- a/fs/devpts/inode.c
> > +++ b/fs/devpts/inode.c
> > @@ -188,23 +188,35 @@ static int parse_mount_options(char *data, int op, struct pts_mount_opts *opts)
> > token = match_token(p, tokens, args);
> > switch (token) {
> > case Opt_uid:
> > - if (match_int(&args[0], &option))
> > + {
>
> It might be neater to lay this out as
>
> case Opt_uid: {
I'll do it.
> > + char *uidstr = args[0].from;
> > + uid_t uidval;
> > + int rc = kstrtouint(uidstr, 0, &uidval);
>
> This assumes that the architecture/config uses a uint for uid_t. We
> have no business assuming this - it's an opaque type for a reason. It
> would be safer to do
>
> unsigned long uidl;
>
> rc = kstrtoul(uidstr, 0, &uidl);
> uidval = uidl;
That's a good point. I'll do it.
> > + if (rc)
> > return -EINVAL;
>
> I don't get it. From my reading, kstrtouint->parse_integer() returns
> "number of characters parsed or -E". So this code won't work. But
> presumably it *does* work, so why?
It's probably because kstrtouint() returns just 0 on success.
That's what functions in the call chain of kstrtouint() -> kstrtoull() ->
_kstrtoull() -> _parse_integer() are actually doing.
_parse_integer() actually returns rv, i.e. number of characters parsed.
But after that, if there's no error, _kstrtoull() simply returns 0.
> Also, we should probably return `rc' here if it's negative, to
> propagate the error which kstrtouint() detected. That's a minor
> non-back-compatible change but it shouldn't matter.
Okay, I also think that we should return rc. I'll do it.
> otoh, kstrtouint() likes to return -ERANGE when things go wrong.
> ERANGE means "Math result not representable", which is a nonsenscal
> error code in this context. Sigh, why do people keep doing this.
Hmm, good to know.
Thanks,
Dongsu
> > - uid = make_kuid(current_user_ns(), option);
> > + uid = make_kuid(current_user_ns(), uidval);
> > if (!uid_valid(uid))
> > return -EINVAL;
> > opts->uid = uid;
> > opts->setuid = 1;
> > break;
> >
> > ...
> >
next prev parent reply other threads:[~2015-08-19 7:24 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-18 14:31 [PATCH] devpts: allow mounting with uid/gid of uint32_t Dongsu Park
2015-08-18 15:18 ` [PATCH v2] " Dongsu Park
2015-08-18 23:44 ` Andrew Morton
2015-08-19 7:24 ` Dongsu Park [this message]
2015-08-19 7:47 ` Andrew Morton
2015-08-19 8:34 ` Rasmus Villemoes
2015-08-19 10:47 ` Alexey Dobriyan
2015-08-28 19:33 ` Peter Hurley
2015-08-29 10:43 ` Dongsu Park
2015-08-29 21:44 ` Alexey Dobriyan
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=20150819072431.GA2642@posteo.de \
--to=dpark@posteo.net \
--cc=akpm@linux-foundation.org \
--cc=alban@endocode.com \
--cc=dhowells@redhat.com \
--cc=josh@joshtriplett.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=peter@hurleysoftware.com \
--cc=viro@zeniv.linux.org.uk \
/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.