elf->data is 'signed char' and casting it to 'int' will sign extend. Most non-intrusive fix is to just have get_elfeitype() take type as 'unsigned char' to make implicit cast. diff -ru pax-utils-1.2.2.orig/paxelf.c pax-utils-1.2.2/paxelf.c --- pax-utils-1.2.2.orig/paxelf.c 2017-01-24 20:24:53.000000000 +0000 +++ pax-utils-1.2.2/paxelf.c 2017-09-26 07:01:00.115498082 +0000 @@ -65,7 +65,7 @@ QUERY(ELFOSABI_STANDALONE), { 0, 0 } }; -const char *get_elfeitype(int ei_type, int type) +const char *get_elfeitype(int ei_type, unsigned char type) { switch (ei_type) { case EI_CLASS: return find_pairtype(elf_ei_class, type); diff -ru pax-utils-1.2.2.orig/paxelf.h pax-utils-1.2.2/paxelf.h --- pax-utils-1.2.2.orig/paxelf.h 2017-01-24 20:24:53.000000000 +0000 +++ pax-utils-1.2.2/paxelf.h 2017-09-26 07:00:44.941879820 +0000 @@ -56,7 +56,7 @@ extern elfobj *_readelf(const char *filename, int read_only); #define readelf(filename) _readelf(filename, 1) extern void unreadelf(elfobj *elf); -extern const char *get_elfeitype(int ei_type, int type); +extern const char *get_elfeitype(int ei_type, unsigned char type); extern const char *get_elfetype(elfobj *elf); extern const char *get_endian(elfobj *elf); extern const char *get_elfosabi(elfobj *elf);