On Sun, Nov 10, 2019 at 02:55:42PM +0100, Maciej S. Szmigiero wrote: > Since commit 59b569480dc8 > ("random: Use wait_event_freezable() in add_hwgenerator_randomness()") > there is a race in add_hwgenerator_randomness() between freezing and > stopping the calling kthread. > > This commit changed wait_event_interruptible() call with > kthread_freezable_should_stop() as a condition into wait_event_freezable() > with just kthread_should_stop() as a condition to fix a warning that > kthread_freezable_should_stop() might sleep inside the wait. > > wait_event_freezable() ultimately calls __refrigerator() with its > check_kthr_stop argument set to false, which causes it to keep the kthread > frozen even if somebody calls kthread_stop() on it. > > Calling wait_event_freezable() with kthread_should_stop() as a condition > is racy because it doesn't take into account the situation where this > condition becomes true on a kthread marked for freezing only after this > condition has already been checked. > > Calling freezing() should avoid the issue that the commit 59b569480dc8 has > fixed, as it is only a checking function, it doesn't actually do the > freezing. > > add_hwgenerator_randomness() has two post-boot users: in khwrng the > kthread will be frozen anyway by call to kthread_freezable_should_stop() > in its main loop, while its second user (ath9k-hwrng) is not freezable at > all. > > This change allows a VM with virtio-rng loaded to write s2disk image > successfully. > > Fixes: 59b569480dc8 ("random: Use wait_event_freezable() in add_hwgenerator_randomness()") > Signed-off-by: Maciej S. Szmigiero <mail@xxxxxxxxxxxxxxxxxxxxx> > --- > drivers/char/random.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) Patch applied. Thanks. -- Email: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt