elf.h SHF_EXCLUDE signed int 31 bit shift triggers undefined behaviour.
authorMark Wielaard <mjw@redhat.com>
Tue, 28 Apr 2015 11:56:15 +0000 (13:56 +0200)
committerFlorian Weimer <fweimer@redhat.com>
Tue, 28 Apr 2015 11:56:16 +0000 (13:56 +0200)
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.

ChangeLog
elf/elf.h

index 0e7a0a0..4b58951 100644 (file)
--- 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
index 71492a2..39bafc2 100644 (file)
--- 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.  */