about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMark Wielaard <mjw@redhat.com>2015-04-28 13:56:15 +0200
committerFlorian Weimer <fweimer@redhat.com>2015-04-28 13:56:16 +0200
commitfb4041ae532fd21a82618c2be09898ea8979dec5 (patch)
tree50cfe5803f87379ecc36b3973a50a452a7ca2ec6
parent3f2e21e9cf577b57552f16f9ce84d0237055c7ea (diff)
downloadglibc-fb4041ae532fd21a82618c2be09898ea8979dec5.tar.gz
glibc-fb4041ae532fd21a82618c2be09898ea8979dec5.tar.xz
glibc-fb4041ae532fd21a82618c2be09898ea8979dec5.zip
elf.h SHF_EXCLUDE signed int 31 bit shift triggers undefined behaviour.
Any use of SHF_EXCLUDE in code that tries to check it against sh_flags
will trigger undefined behaviour because it is defined as a 31 bit shift
against an signed integer. Fix by explicitly using an unsigned int.
-rw-r--r--ChangeLog4
-rw-r--r--elf/elf.h2
2 files changed, 5 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 0e7a0a05b9..4b58951ab4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2015-04-28  Mark Wielaard  <mjw@redhat.com>
+
+	* elf/elf.h (SHF_EXCLUDE): Use unsigned 1 for shift.
+
 2015-04-27  David S. Miller  <davem@davemloft.net>
 
 	* sysdeps/unix/sysv/linux/sparc/sparc32/localplt.data: Remove
diff --git a/elf/elf.h b/elf/elf.h
index 71492a24d6..39bafc225c 100644
--- a/elf/elf.h
+++ b/elf/elf.h
@@ -371,7 +371,7 @@ typedef struct
 #define SHF_MASKPROC	     0xf0000000	/* Processor-specific */
 #define SHF_ORDERED	     (1 << 30)	/* Special ordering requirement
 					   (Solaris).  */
-#define SHF_EXCLUDE	     (1 << 31)	/* Section is excluded unless
+#define SHF_EXCLUDE	     (1U << 31)	/* Section is excluded unless
 					   referenced or allocated (Solaris).*/
 
 /* Section group handling.  */