X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=drivers%2Fchar%2Frandom.c;h=102c50d38902ca43fed85641618ba202a7251679;hb=677d1bb0cbcfc43d10e95ab0c28b9045a1de7b5b;hp=6b75713d953a4e719cd33610f6034bec430c5d95;hpb=e9f37d3a8d126e73f5737ef548cdf6f618e295e4;p=firefly-linux-kernel-4.4.55.git diff --git a/drivers/char/random.c b/drivers/char/random.c index 6b75713d953a..102c50d38902 100644 --- a/drivers/char/random.c +++ b/drivers/char/random.c @@ -995,8 +995,11 @@ retry: ibytes = min_t(size_t, ibytes, have_bytes - reserved); if (ibytes < min) ibytes = 0; - entropy_count = max_t(int, 0, - entropy_count - (ibytes << (ENTROPY_SHIFT + 3))); + if (have_bytes >= ibytes + reserved) + entropy_count -= ibytes << (ENTROPY_SHIFT + 3); + else + entropy_count = reserved << (ENTROPY_SHIFT + 3); + if (cmpxchg(&r->entropy_count, orig, entropy_count) != orig) goto retry;