From: "Jason A. Donenfeld" <Jason@zx2c4.com>
To: Christian Brauner <brauner@kernel.org>
Cc: Florian Weimer <fweimer@redhat.com>,
linux-kernel@vger.kernel.org, patches@lists.linux.dev,
tglx@linutronix.de, linux-crypto@vger.kernel.org, x86@kernel.org,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Adhemerval Zanella Netto <adhemerval.zanella@linaro.org>,
Carlos O'Donell <carlos@redhat.com>,
linux-api@vger.kernel.org, Arnd Bergmann <arnd@arnd.de>
Subject: Re: [PATCH v6 1/3] random: add vgetrandom_alloc() syscall
Date: Thu, 24 Nov 2022 13:57:45 +0100 [thread overview]
Message-ID: <Y39qSe30VYa0ftK4@zx2c4.com> (raw)
In-Reply-To: <20221124124927.argohuob2bslolbt@wittgenstein>
Hi Christian,
Thanks a bunch for chiming in.
On Thu, Nov 24, 2022 at 01:49:27PM +0100, Christian Brauner wrote:
> Alternatively, you could also introduce a simple struct versioned by
> size for this system call similar to mount_setatt() and clone3() and so
> on. This way you don't need to worry about future extensibilty. Just a
> thought.
Briefly considered that, but it seemed a bit heavy for something like
this. I'm not super heavily opposed, but just seemed like a bit much.
> > > >> >> > +SYSCALL_DEFINE3(vgetrandom_alloc, unsigned long __user *, num,
> > > >> >> > + unsigned long __user *, size_per_each, unsigned int, flags)
> > > >> >>
> > > >> >> I think you should make this __u64, so that you get a consistent
> > > >> >> userspace interface on all architectures, without the need for compat
> > > >> >> system calls.
> > > >> >
> > > >> > That would be quite unconventional. Most syscalls that take lengths do
> > > >> > so with the native register size (`unsigned long`, `size_t`), rather
> > > >> > than u64. If you can point to a recent trend away from this by
> > > >> > indicating some commits that added new syscalls with u64, I'd be happy
> > > >> > to be shown otherwise. But AFAIK, that's not the way it's done.
> > > >>
> > > >> See clone3 and struct clone_args.
>
> For system calls that take structs as arguments we use u64 in the struct
> for proper alignment so we can extend structs without regressing old
> kernels. We have a few of those extensible struct system calls.
>
> But we don't really have a lot system calls that pass u64 as a pointer
> outside of a structure so far. Neither as register and nor as pointer
> iirc.
Right, the __u64_aligned business seemed to be mostly about
extensibility.
> > > > The struct is one thing. But actually, clone3 takes a `size_t`:
> > > >
> > > > SYSCALL_DEFINE2(clone3, struct clone_args __user *, uargs, size_t, size)
> > > >
> > > > I take from this that I too should use `size_t` rather than `unsigned
> > > > long.` And it doesn't seem like there's any compat clone3.
> > >
> > > But vgetrandom_alloc does not use unsigned long, but unsigned long *.
> > > You need to look at the contents for struct clone_args for comparison.
> >
> > Ah! I see what you mean; that's a good point. The usual register
> > clearing thing isn't going to happen because these are addresses.
> >
> > I still am somewhat hesitant, though, because `size_t` is really the
> > "proper" type to be used. Maybe the compat syscall thing is just a
> > necessary evil?
>
> I think making this a size_t is fine. We haven't traditionally used u32
> for sizes. All syscalls that pass structs versioned by size use size_t.
> So I would recommend to stick with that.
This isn't quite a struct versioned by size. This is:
void *vgetrandom_alloc([inout] size_t *num, [out] size_t *size_per_each, unsigned int flags);
You give it an input 'num' and some flags (currently flags=0), and it
gives you back an output 'num' size, an output 'size_per_each' size, and
an opaque pointer value mapping as its return value.
I do like the idea of keeping size_t so that the type is "right". But
the other arguments are equally compelling as well, so not sure.
Jason
next prev parent reply other threads:[~2022-11-24 12:57 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-21 15:29 [PATCH v6 0/3] implement getrandom() in vDSO Jason A. Donenfeld
2022-11-21 15:29 ` [PATCH v6 1/3] random: add vgetrandom_alloc() syscall Jason A. Donenfeld
2022-11-23 10:46 ` Florian Weimer
2022-11-24 1:04 ` Jason A. Donenfeld
2022-11-24 5:25 ` Florian Weimer
2022-11-24 12:03 ` Jason A. Donenfeld
2022-11-24 12:15 ` Florian Weimer
2022-11-24 12:24 ` Jason A. Donenfeld
2022-11-24 12:48 ` Jason A. Donenfeld
2022-11-24 13:18 ` Arnd Bergmann
2022-11-24 12:49 ` Christian Brauner
2022-11-24 12:57 ` Jason A. Donenfeld [this message]
2022-11-24 16:30 ` Jason A. Donenfeld
2022-11-21 15:29 ` [PATCH v6 2/3] random: introduce generic vDSO getrandom() implementation Jason A. Donenfeld
2022-11-23 8:51 ` Rasmus Villemoes
2022-11-24 1:18 ` Jason A. Donenfeld
2022-11-25 8:02 ` Rasmus Villemoes
2022-11-23 10:48 ` Florian Weimer
2022-11-24 1:08 ` Jason A. Donenfeld
2022-11-24 5:28 ` Florian Weimer
2022-11-24 11:57 ` Jason A. Donenfeld
2022-11-21 15:29 ` [PATCH v6 3/3] x86: vdso: Wire up getrandom() vDSO implementation Jason A. Donenfeld
2022-11-22 20:14 ` [PATCH v6 0/3] implement getrandom() in vDSO Jason A. Donenfeld
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=Y39qSe30VYa0ftK4@zx2c4.com \
--to=jason@zx2c4.com \
--cc=adhemerval.zanella@linaro.org \
--cc=arnd@arnd.de \
--cc=brauner@kernel.org \
--cc=carlos@redhat.com \
--cc=fweimer@redhat.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-api@vger.kernel.org \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=patches@lists.linux.dev \
--cc=tglx@linutronix.de \
--cc=x86@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.