From 333517ac1c558f36114351193889397712905a85 Mon Sep 17 00:00:00 2001 From: Michael Braun Date: Fri, 18 Aug 2017 18:55:17 +0200 Subject: [PATCH] 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 --- src/crypto/random.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/crypto/random.c b/src/crypto/random.c index 3a86a93a4..fb9241762 100644 --- a/src/crypto/random.c +++ b/src/crypto/random.c @@ -66,6 +66,9 @@ static void random_write_entropy(void); static u32 __ROL32(u32 x, u32 y) { + if (y == 0) + return x; + return (x << (y & 31)) | (x >> (32 - (y & 31))); }