From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eugeniu Rosca Date: Mon, 27 Aug 2018 01:13:26 +0200 Subject: [U-Boot] [PATCH v2 08/13] disk: part_dos: Fix signed shift overflow In-Reply-To: <20180826231332.2491-1-erosca@de.adit-jv.com> References: <20180826231332.2491-1-erosca@de.adit-jv.com> Message-ID: <20180826231332.2491-9-erosca@de.adit-jv.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 --- 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) -- 2.18.0