diff options
Diffstat (limited to 'drivers/char/random.c')
| -rw-r--r-- | drivers/char/random.c | 12 | 
1 files changed, 4 insertions, 8 deletions
diff --git a/drivers/char/random.c b/drivers/char/random.c index 2c532a6b0a21..9675821b4b5a 100644 --- a/drivers/char/random.c +++ b/drivers/char/random.c @@ -984,14 +984,10 @@ retry:  		ibytes = 0;  	} else {  		/* If limited, never pull more than available */ -		if (r->limit && ibytes + reserved >= have_bytes) -			ibytes = have_bytes - reserved; - -		if (have_bytes >= ibytes + reserved) -			entropy_count -= ibytes << (ENTROPY_SHIFT + 3); -		else -			entropy_count = reserved << (ENTROPY_SHIFT + 3); - +		if (r->limit) +			ibytes = min_t(size_t, ibytes, have_bytes - reserved); +		entropy_count = max_t(int, 0, +			    entropy_count - (ibytes << (ENTROPY_SHIFT + 3)));  		if (cmpxchg(&r->entropy_count, orig, entropy_count) != orig)  			goto retry;  |