Avoid ubsan warning on 0x80<<24 not fitting in int in WPA_GET_BE32/LE32
authorJouni Malinen <j@w1.fi>
Tue, 7 Jul 2015 12:54:31 +0000 (15:54 +0300)
committerJouni Malinen <j@w1.fi>
Tue, 7 Jul 2015 13:25:06 +0000 (16:25 +0300)
Use a typecast to make this shift unsigned so that the MSB fits within
the range of allowed values.

Signed-off-by: Jouni Malinen <j@w1.fi>
src/utils/common.h

index b140355..651ce2e 100644 (file)
@@ -262,7 +262,7 @@ static inline void WPA_PUT_BE24(u8 *a, u32 val)
 
 static inline u32 WPA_GET_BE32(const u8 *a)
 {
-       return (a[0] << 24) | (a[1] << 16) | (a[2] << 8) | a[3];
+       return ((u32) a[0] << 24) | (a[1] << 16) | (a[2] << 8) | a[3];
 }
 
 static inline void WPA_PUT_BE32(u8 *a, u32 val)
@@ -275,7 +275,7 @@ static inline void WPA_PUT_BE32(u8 *a, u32 val)
 
 static inline u32 WPA_GET_LE32(const u8 *a)
 {
-       return (a[3] << 24) | (a[2] << 16) | (a[1] << 8) | a[0];
+       return ((u32) a[3] << 24) | (a[2] << 16) | (a[1] << 8) | a[0];
 }
 
 static inline void WPA_PUT_LE32(u8 *a, u32 val)