
Fix the following UBSAN report: ==================================================================== UBSAN: Undefined behaviour in disk/part_dos.c:30:22 left shift of 209 by 24 places cannot be represented in type 'int' ====================================================================
Steps to reproduce the above: * echo CONFIG_UBSAN=y >> configs/qemu-x86_defconfig * make ARCH=x86 qemu-x86_defconfig all * qemu-system-i386 --version QEMU emulator version 2.5.0 (Debian 1:2.5+dfsg-5ubuntu10.31) * qemu-system-i386 --nographic -bios u-boot.rom * bootefi selftest
Fixes: fe8c2806cdba ("Initial revision") Signed-off-by: Eugeniu Rosca erosca@de.adit-jv.com ---
Changes in v2: - None. Newly pushed. --- disk/part_dos.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/disk/part_dos.c b/disk/part_dos.c index 936cee0d36ce..e19695846a95 100644 --- a/disk/part_dos.c +++ b/disk/part_dos.c @@ -27,11 +27,10 @@ */ static inline unsigned int le32_to_int(unsigned char *le32) { - return ((le32[3] << 24) + - (le32[2] << 16) + - (le32[1] << 8) + - le32[0] - ); + return (((unsigned int)le32[3] << 24) + + ((unsigned int)le32[2] << 16) + + ((unsigned int)le32[1] << 8) + + (unsigned int)le32[0]); }
static inline int is_extended(int part_type)