This is the mail archive of the mailing list for the glibc project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] elf.h SHF_EXCLUDE signed int 31 bit shift triggers undefined behaviour.

On Tue, Mar 24, 2015 at 02:13:44PM +0000, Szabolcs Nagy wrote:
> On 24/03/15 10:39, Mark Wielaard wrote:
> > 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.
> there is another proposed patch for this

I missed that one. It does seem more ambitious than what I am proposing.
It is probably a good idea to change every constant to the appropriate
unsigned type. But the testing requirements seem hard to satisfy and it
looks like that patch is stalled because of that.

Could this simpler patch that just fixes the one constant that does
have a real problem in practice when used be fixed independently?
I like building my project with gcc -fsanitize=undefined and the
usage of SHF_EXCLUDE is preventing that atm.

> >  ChangeLog | 4 ++++
> >  elf/elf.h | 2 +-
> >  2 files changed, 5 insertions(+), 1 deletion(-)
> > 
> i think changelog entries are supposed to be submitted separately

OK. How about the following then?

I would appreciate it if someone could push that for me since I don't
have glibc commit access.



2015-03-24  Mark Wielaard  <>

       * elf/elf.h (SHF_EXCLUDE): Use unsigned 1 for shift.

Attachment: shf_exclude.patch
Description: Text document

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]