From: Greg Kroah-Hartman Date: Tue, 10 Apr 2018 12:55:50 +0000 (+0200) Subject: 3.18-stable patches X-Git-Tag: v4.16.2~22 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0d27bcfbe802690d8fcf608504a21b5846fac1c6;p=thirdparty%2Fkernel%2Fstable-queue.git 3.18-stable patches added patches: random-use-lockless-method-of-accessing-and-updating-f-reg_idx.patch --- diff --git a/queue-3.18/random-use-lockless-method-of-accessing-and-updating-f-reg_idx.patch b/queue-3.18/random-use-lockless-method-of-accessing-and-updating-f-reg_idx.patch new file mode 100644 index 00000000000..2c70b637e09 --- /dev/null +++ b/queue-3.18/random-use-lockless-method-of-accessing-and-updating-f-reg_idx.patch @@ -0,0 +1,45 @@ +From 92e75428ffc90e2a0321062379f883f3671cfebe Mon Sep 17 00:00:00 2001 +From: Theodore Ts'o +Date: Wed, 7 Jun 2017 19:01:32 -0400 +Subject: random: use lockless method of accessing and updating f->reg_idx + +From: Theodore Ts'o + +commit 92e75428ffc90e2a0321062379f883f3671cfebe upstream. + +Linus pointed out that there is a much more efficient way of avoiding +the problem that we were trying to address in commit 9dfa7bba35ac0: +"fix race in drivers/char/random.c:get_reg()". + +Signed-off-by: Theodore Ts'o +Cc: Michael Schmitz +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/char/random.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +--- a/drivers/char/random.c ++++ b/drivers/char/random.c +@@ -863,15 +863,15 @@ 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; ++ unsigned int idx; + + if (regs == NULL) + return 0; +- local_irq_save(flags); +- if (f->reg_idx >= sizeof(struct pt_regs) / sizeof(__u32)) +- f->reg_idx = 0; +- ptr += f->reg_idx++; +- local_irq_restore(flags); ++ idx = READ_ONCE(f->reg_idx); ++ if (idx >= sizeof(struct pt_regs) / sizeof(__u32)) ++ idx = 0; ++ ptr += idx++; ++ WRITE_ONCE(f->reg_idx, idx); + return *ptr; + } + diff --git a/queue-3.18/series b/queue-3.18/series index 134e53bbb43..ced0f540b77 100644 --- a/queue-3.18/series +++ b/queue-3.18/series @@ -101,3 +101,4 @@ ipsec-check-return-value-of-skb_to_sgvec-always.patch rxrpc-check-return-value-of-skb_to_sgvec-always.patch virtio_net-check-return-value-of-skb_to_sgvec-always.patch virtio_net-check-return-value-of-skb_to_sgvec-in-one-more-location.patch +random-use-lockless-method-of-accessing-and-updating-f-reg_idx.patch