crypto: Fix undefined behavior in random number generator

ubsan reported:

../src/crypto/random.c:69:30: runtime error: shift exponent 32 is too large for 32-bit type 'unsigned int'

Explicitly check for the ROL32(x, 0) case which is supposed to be a
no-op.

Signed-off-by: Michael Braun <michael-dev@fami-braun.de>
This commit is contained in:
Michael Braun 2017-08-18 18:55:17 +02:00 committed by Jouni Malinen
parent 84fccc7242
commit 333517ac1c

View file

@ -66,6 +66,9 @@ static void random_write_entropy(void);
static u32 __ROL32(u32 x, u32 y) static u32 __ROL32(u32 x, u32 y)
{ {
if (y == 0)
return x;
return (x << (y & 31)) | (x >> (32 - (y & 31))); return (x << (y & 31)) | (x >> (32 - (y & 31)));
} }