Jiri Kosina 10b3a32d29 random: fix accounting race condition with lockless irq entropy_count update
Commit 902c098a3663 ("random: use lockless techniques in the interrupt
path") turned IRQ path from being spinlock protected into lockless
cmpxchg-retry update.

That commit removed r->lock serialization between crediting entropy bits
from IRQ context and accounting when extracting entropy on userspace
read path, but didn't turn the r->entropy_count reads/updates in
account() to use cmpxchg as well.

It has been observed, that under certain circumstances this leads to
read() on /dev/urandom to return 0 (EOF), as r->entropy_count gets
corrupted and becomes negative, which in turn results in propagating 0
all the way from account() to the actual read() call.

Convert the accounting code to be the proper lockless counterpart of
what has been partially done by 902c098a3663.

Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Cc: Theodore Ts'o <tytso@mit.edu>
Cc: Greg KH <greg@kroah.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2013-05-24 16:22:52 -07:00
..
2013-05-23 13:50:53 -07:00
2013-05-23 09:27:08 -07:00
2013-05-17 14:31:05 -04:00
2013-04-26 22:30:25 +02:00
2013-05-09 10:11:08 -07:00
2013-05-09 09:59:16 -07:00
2013-05-23 18:24:10 -07:00
2013-05-06 13:07:33 +02:00
2013-05-06 14:59:13 -07:00
2013-05-20 13:38:14 -07:00
2013-05-23 09:26:32 -07:00
2013-05-15 10:58:22 -07:00
2013-05-07 14:04:56 -07:00
2013-05-07 14:02:00 -07:00
2013-05-23 09:27:49 -07:00
2013-05-23 09:23:32 -07:00
2013-05-02 14:02:32 -07:00
2013-05-04 12:31:18 -07:00
2013-05-04 12:31:18 -07:00