random: fix locking dependency with the tasklist_lock
authorTheodore Ts'o <tytso@mit.edu>
Mon, 4 Mar 2013 16:59:12 +0000 (11:59 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Mon, 4 Mar 2013 17:05:15 +0000 (12:05 -0500)
commitb980955236922ae6106774511c5c05003d3ad225
tree3eba34d4587e58ec7b15e8fb4af5572620288fe6
parent19f949f52599ba7c3f67a5897ac6be14bfcb1200
random: fix locking dependency with the tasklist_lock

Commit 6133705494bb introduced a circular lock dependency because
posix_cpu_timers_exit() is called by release_task(), which is holding
a writer lock on tasklist_lock, and this can cause a deadlock since
kill_fasync() gets called with nonblocking_pool.lock taken.

There's no reason why kill_fasync() needs to be taken while the random
pool is locked, so move it out to fix this locking dependency.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Reported-by: Russ Dill <Russ.Dill@gmail.com>
Cc: stable@kernel.org
drivers/char/random.c