From: Greg Kroah-Hartman Date: Tue, 10 Apr 2018 12:56:35 +0000 (+0200) Subject: 4.9-stable patches X-Git-Tag: v4.16.2~20 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=88cd34304d58566a2d8957b5b84cadb03ca9ace4;p=thirdparty%2Fkernel%2Fstable-queue.git 4.9-stable patches added patches: random-use-lockless-method-of-accessing-and-updating-f-reg_idx.patch --- diff --git a/queue-4.9/random-use-lockless-method-of-accessing-and-updating-f-reg_idx.patch b/queue-4.9/random-use-lockless-method-of-accessing-and-updating-f-reg_idx.patch new file mode 100644 index 00000000000..aa6476220e7 --- /dev/null +++ b/queue-4.9/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 +@@ -1115,15 +1115,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-4.9/series b/queue-4.9/series index 23229b5ee9e..ed2f2151bec 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -274,3 +274,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