From: Richard Henderson Date: Thu, 17 Apr 2025 20:58:35 +0000 (-0300) Subject: elf: Adjust DT_EXTRATAGIDX to avoid undefined shifts X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=73c7242778e23cef2712756ba1e5aaf141de7851;p=thirdparty%2Fglibc.git elf: Adjust DT_EXTRATAGIDX to avoid undefined shifts When building with --enable-ubsan, the relocation code triggers: UBSAN: Undefined behaviour in get-dynamic-info.h:56:30 left shift of 1879047925 by 1 cannot be represented in type 'int' Originally from https://sourceware.org/pipermail/libc-alpha/2015-August/063015.html. --- diff --git a/elf/elf.h b/elf/elf.h index 1e1a59c14d..d48cf47b9a 100644 --- a/elf/elf.h +++ b/elf/elf.h @@ -995,7 +995,7 @@ typedef struct range. Be compatible. */ #define DT_AUXILIARY 0x7ffffffd /* Shared object to load before self */ #define DT_FILTER 0x7fffffff /* Shared object to get values from */ -#define DT_EXTRATAGIDX(tag) ((Elf32_Word)-((Elf32_Sword) (tag) <<1>>1)-1) +#define DT_EXTRATAGIDX(tag) (-((Elf32_Sword)((Elf32_Word)(tag) * 2) / 2 + 1)) #define DT_EXTRANUM 3 /* Values of `d_un.d_val' in the DT_FLAGS entry. */