From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf0-f193.google.com ([209.85.192.193]:42302 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753801AbeDIUaU (ORCPT ); Mon, 9 Apr 2018 16:30:20 -0400 MIME-Version: 1.0 In-Reply-To: <1523303888144113@kroah.com> References: <1523303888144113@kroah.com> From: Michael Schmitz Date: Tue, 10 Apr 2018 08:30:19 +1200 Message-ID: Subject: Re: Patch "fix race in drivers/char/random.c:get_reg()" has been added to the 4.9-stable tree To: Greg KH Cc: Sasha Levin , "Theodore Ts'o" , stable@vger.kernel.org, stable-commits@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Sender: stable-owner@vger.kernel.org List-ID: Greg, please do also apply Linus' final fix to this issue - commit 92e75428ffc90e2a ("random: use lockless method of accessing and updating f->reg_idx"). Cheers, Michael On Tue, Apr 10, 2018 at 7:58 AM, wrote: > > This is a note to let you know that I've just added the patch titled > > fix race in drivers/char/random.c:get_reg() > > to the 4.9-stable tree which can be found at: > http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary > > The filename of the patch is: > fix-race-in-drivers-char-random.c-get_reg.patch > and it can be found in the queue-4.9 subdirectory. > > If you, or anyone else, feels it should not be added to the stable tree, > please let know about it. > > > From foo@baz Mon Apr 9 17:09:24 CEST 2018 > From: Michael Schmitz > Date: Sun, 30 Apr 2017 19:49:21 +1200 > Subject: fix race in drivers/char/random.c:get_reg() > > From: Michael Schmitz > > > [ Upstream commit 9dfa7bba35ac08a63565d58c454dccb7e1bb0a08 ] > > get_reg() can be reentered on architectures with prioritized interrupts > (m68k in this case), causing f->reg_index to be incremented after the > range check. Out of bounds memory access past the pt_regs struct results. > This will go mostly undetected unless access is beyond end of memory. > > Prevent the race by disabling interrupts in get_reg(). > > Tested on m68k (Atari Falcon, and ARAnyM emulator). > > Kudos to Geert Uytterhoeven for helping to trace this race. > > Signed-off-by: Michael Schmitz > Signed-off-by: Theodore Ts'o > Signed-off-by: Sasha Levin > Signed-off-by: Greg Kroah-Hartman > --- > drivers/char/random.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > --- a/drivers/char/random.c > +++ b/drivers/char/random.c > @@ -1115,12 +1115,16 @@ static void add_interrupt_bench(cycles_t > static __u32 get_reg(struct fast_pool *f, struct pt_regs *regs) > { > __u32 *ptr = (__u32 *) regs; > + unsigned long flags; > > if (regs == NULL) > return 0; > + local_irq_save(flags); > if (f->reg_idx >= sizeof(struct pt_regs) / sizeof(__u32)) > f->reg_idx = 0; > - return *(ptr + f->reg_idx++); > + ptr += f->reg_idx++; > + local_irq_restore(flags); > + return *ptr; > } > > void add_interrupt_randomness(int irq, int irq_flags) > > > Patches currently in stable-queue which might be from schmitzmic@gmail.com are > > queue-4.9/fix-race-in-drivers-char-random.c-get_reg.patch