Re: [PATCH] random: fix the RNDRESEEDCRNG ioctl
On Mon, Jan 4, 2021 at 7:55 PM Eric Biggers wrote: > On Fri, Nov 20, 2020 at 10:52:14AM -0800, Eric Biggers wrote: > > On Mon, Oct 26, 2020 at 09:33:43AM -0700, Eric Biggers wrote: > > > On Tue, Oct 06, 2020 at 08:50:21PM -0700, Eric Biggers wrote: > > > > On Tue, Sep 15, 2020 at 09:19:08PM -0700, Eric Biggers wrote: > > > > > From: Eric Biggers > > > > > > > > > > The RNDRESEEDCRNG ioctl reseeds the primary_crng from itself, which > > > > > doesn't make sense. Reseed it from the input_pool instead. > > > > > > > > > > Fixes: d848e5f8e1eb ("random: add new ioctl RNDRESEEDCRNG") > > > > > Cc: sta...@vger.kernel.org > > > > > Signed-off-by: Eric Biggers > > > > > > > > Ping? > > > > > > Ping. > > > > Ping. > > Ping. You may want to resend to akpm with a note that the maintainer is unresponsive.
Re: [PATCH] random: fix the RNDRESEEDCRNG ioctl
On Fri, Nov 20, 2020 at 10:52:14AM -0800, Eric Biggers wrote: > On Mon, Oct 26, 2020 at 09:33:43AM -0700, Eric Biggers wrote: > > On Tue, Oct 06, 2020 at 08:50:21PM -0700, Eric Biggers wrote: > > > On Tue, Sep 15, 2020 at 09:19:08PM -0700, Eric Biggers wrote: > > > > From: Eric Biggers > > > > > > > > The RNDRESEEDCRNG ioctl reseeds the primary_crng from itself, which > > > > doesn't make sense. Reseed it from the input_pool instead. > > > > > > > > Fixes: d848e5f8e1eb ("random: add new ioctl RNDRESEEDCRNG") > > > > Cc: sta...@vger.kernel.org > > > > Signed-off-by: Eric Biggers > > > > > > Ping? > > > > Ping. > > Ping. Ping.
Re: [PATCH] random: fix the RNDRESEEDCRNG ioctl
On Mon, Oct 26, 2020 at 09:33:43AM -0700, Eric Biggers wrote: > On Tue, Oct 06, 2020 at 08:50:21PM -0700, Eric Biggers wrote: > > On Tue, Sep 15, 2020 at 09:19:08PM -0700, Eric Biggers wrote: > > > From: Eric Biggers > > > > > > The RNDRESEEDCRNG ioctl reseeds the primary_crng from itself, which > > > doesn't make sense. Reseed it from the input_pool instead. > > > > > > Fixes: d848e5f8e1eb ("random: add new ioctl RNDRESEEDCRNG") > > > Cc: sta...@vger.kernel.org > > > Signed-off-by: Eric Biggers > > > > Ping? > > Ping. Ping.
Re: [PATCH] random: fix the RNDRESEEDCRNG ioctl
On Tue, Oct 06, 2020 at 08:50:21PM -0700, Eric Biggers wrote: > On Tue, Sep 15, 2020 at 09:19:08PM -0700, Eric Biggers wrote: > > From: Eric Biggers > > > > The RNDRESEEDCRNG ioctl reseeds the primary_crng from itself, which > > doesn't make sense. Reseed it from the input_pool instead. > > > > Fixes: d848e5f8e1eb ("random: add new ioctl RNDRESEEDCRNG") > > Cc: sta...@vger.kernel.org > > Signed-off-by: Eric Biggers > > Ping? Ping.
Re: [PATCH] random: fix the RNDRESEEDCRNG ioctl
On Wed, Sep 16, 2020 at 6:19 AM Eric Biggers wrote: > The RNDRESEEDCRNG ioctl reseeds the primary_crng from itself, which > doesn't make sense. Reseed it from the input_pool instead. Good catch. (And its purpose is to ensure that entropy from random_write() is plumbed all the way through such that getrandom() and friends are guaranteed to actually use that entropy on the next invocation; and random_write() just puts data into the input pool.) But actually, looking at the surrounding code, I think there's another small problem? > Fixes: d848e5f8e1eb ("random: add new ioctl RNDRESEEDCRNG") > Cc: sta...@vger.kernel.org > Signed-off-by: Eric Biggers Reviewed-by: Jann Horn > --- > drivers/char/random.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/char/random.c b/drivers/char/random.c > index d20ba1b104ca3..a8b9e66f41435 100644 > --- a/drivers/char/random.c > +++ b/drivers/char/random.c > @@ -1973,7 +1973,7 @@ static long random_ioctl(struct file *f, unsigned int > cmd, unsigned long arg) > return -EPERM; > if (crng_init < 2) > return -ENODATA; > - crng_reseed(_crng, NULL); > + crng_reseed(_crng, _pool); So now this will pull the data from the input_pool into the primary_crng, so far so good... > crng_global_init_time = jiffies - 1; ... and this will hopefully cause _extract_crng() to pull from the primary_crng into crng_node_pool[numa_node_id()] afterwards. Unless things are going too fast and therefore the jiffies haven't changed since the last crng_reseed() on the crng_node_pool[numa_node_id()]... a sequence number would probably be more robust than a timestamp. And a plain write like this without holding any locks is also questionable. The easiest way would probably be to make it an atomic_long_t, do atomic_long_inc() instead of setting crng_global_init_time here, and check atomic_long_read(...) against a copy stored in the crng_state on _extract_crng()? And in crng_reseed(), grab the global sequence number at the start, then do smp_rmb(), and then under the lock do the actual reseeding and bump ->init_time? Or something like that? > return 0; > default:
Re: [PATCH] random: fix the RNDRESEEDCRNG ioctl
On Tue, Sep 15, 2020 at 09:19:08PM -0700, Eric Biggers wrote: > From: Eric Biggers > > The RNDRESEEDCRNG ioctl reseeds the primary_crng from itself, which > doesn't make sense. Reseed it from the input_pool instead. > > Fixes: d848e5f8e1eb ("random: add new ioctl RNDRESEEDCRNG") > Cc: sta...@vger.kernel.org > Signed-off-by: Eric Biggers Ping?
[PATCH] random: fix the RNDRESEEDCRNG ioctl
From: Eric Biggers The RNDRESEEDCRNG ioctl reseeds the primary_crng from itself, which doesn't make sense. Reseed it from the input_pool instead. Fixes: d848e5f8e1eb ("random: add new ioctl RNDRESEEDCRNG") Cc: sta...@vger.kernel.org Signed-off-by: Eric Biggers --- drivers/char/random.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/char/random.c b/drivers/char/random.c index d20ba1b104ca3..a8b9e66f41435 100644 --- a/drivers/char/random.c +++ b/drivers/char/random.c @@ -1973,7 +1973,7 @@ static long random_ioctl(struct file *f, unsigned int cmd, unsigned long arg) return -EPERM; if (crng_init < 2) return -ENODATA; - crng_reseed(_crng, NULL); + crng_reseed(_crng, _pool); crng_global_init_time = jiffies - 1; return 0; default: -- 2.28.0