elfutils eu-readelf segfaults on start (all releases)
apk add elfutils jansson-dev
eu-readelf -d /usr/lib/libjansson.so
Segmentation fault (core dumped)
backtrace:
(gdb) bt full
#0 printf_core (f=f@entry=0x0, fmt=fmt@entry=0x5559b880 <error: Cannot access memory at address 0x5559b880>, ap=ap@entry=0x7fffffffd6a0, nl_arg=nl_arg@entry=0x7fffffffd730, nl_type=nl_type@entry=0x7fffffffd6b8) at src/stdio/vfprintf.c:454
a = <optimized out>
z = <optimized out>
s = 0x5559b880 <error: Cannot access memory at address 0x5559b880>
l10n = 0
fl = <optimized out>
w = <optimized out>
p = <optimized out>
xp = <optimized out>
arg = {i = 0, f = 0, p = 0x0}
argpos = <optimized out>
st = <optimized out>
ps = <optimized out>
cnt = 0
l = 0
i = <optimized out>
buf = '\000' <repeats 42 times>
prefix = <optimized out>
t = <optimized out>
pl = <optimized out>
wc = L"\000"
ws = <optimized out>
mb = "\000\000\000"
#1 0x00007ffff7fb3803 in vfprintf (f=0x7ffff7ffb2c0 <__stdout_FILE>, fmt=0x5559b880 <error: Cannot access memory at address 0x5559b880>, ap=ap@entry=0x7fffffffd818) at src/stdio/vfprintf.c:668
ap2 = {{gp_offset = 8, fp_offset = 48, overflow_arg_area = 0x7fffffffd8f0, reg_save_area = 0x7fffffffd830}}
nl_type = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
nl_arg = {{i = 14, f = <invalid float value>, p = 0xe}, {i = 0, f = <invalid float value>, p = 0x0}, {i = 140737488345152, f = <invalid float value>, p = 0x7fffffffd840}, {i = 1, f = <invalid float value>, p = 0x1}, {i = 140737488345296, f = <invalid float value>, p = 0x7fffffffd8d0}, {i = 0, f = 0,
p = 0x0}, {i = 140737353362707, f = 5.1301573459611796926e-4937, p = 0x7ffff7f42d13}, {i = 4, f = 1.45807981275298984101e-4950, p = 0x4}, {i = 0, f = 0, p = 0x0}, {i = 0, f = 0, p = 0x0}}
internal_buf = '\000' <repeats 40 times>, "\005\005\373\367\377\177", '\000' <repeats 18 times>, "\001\000\000\000\000\000\000\000\000\216\377\367\377\177\000"
saved_buf = 0x0
olderr = <optimized out>
ret = <optimized out>
__need_unlock = <optimized out>
#2 0x00007ffff7fb1466 in printf (fmt=<optimized out>) at src/stdio/printf.c:9
ret = <optimized out>
ap = {{gp_offset = 8, fp_offset = 48, overflow_arg_area = 0x7fffffffd8f0, reg_save_area = 0x7fffffffd830}}
#3 0x000055555557347c in handle_dynamic (shdr=0x7fffffffda10, scn=<optimized out>, ebl=0x7ffff7ea3a90) at readelf.c:1821
class = 2
glink_mem = {sh_name = 29, sh_type = 3, sh_flags = 2, sh_addr = 4368, sh_offset = 4368, sh_size = 1769, sh_link = 0, sh_info = 0, sh_addralign = 1, sh_entsize = 0}
glink = <optimized out>
data = 0x7ffff7e57ec8
cnt = <optimized out>
shstrndx = 22
dyn_ents = 20
#4 print_dynamic (ebl=<optimized out>) at readelf.c:1946
scn = <optimized out>
shdr_mem = {sh_name = 143, sh_type = 6, sh_flags = 3, sh_addr = 52544, sh_offset = 48448, sh_size = 384, sh_link = 3, sh_info = 0, sh_addralign = 8, sh_entsize = 16}
shdr = 0x7fffffffda10
phdr_mem = {p_type = 2, p_flags = 6, p_offset = 48448, p_vaddr = 52544, p_paddr = 52544, p_filesz = 384, p_memsz = 384, p_align = 8}
phdr = <optimized out>
i = <optimized out>
#5 process_elf_file (dwflmod=dwflmod@entry=0x7ffff7ea38a0, fd=<optimized out>) at readelf.c:1008
dwflbias = 0
elf = <optimized out>
ehdr_mem = {e_ident = "\177ELF\002\001\001\000\000\000\000\000\000\000\000", e_type = 3, e_machine = 62, e_version = 1, e_entry = 8688, e_phoff = 64, e_shoff = 49456, e_flags = 0, e_ehsize = 64, e_phentsize = 56, e_phnum = 8, e_shentsize = 64, e_shnum = 23, e_shstrndx = 22}
ehdr = 0x7fffffffdc10
ebl = 0x7ffff7ea3a90
print_unchanged = <optimized out>
pure_elf = 0x0
pure_ebl = 0x7ffff7ea3a90
#6 0x0000555555575773 in process_dwflmod (dwflmod=0x7ffff7ea38a0, userdata=<optimized out>, name=<optimized out>, base=<optimized out>, arg=0x7fffffffdda0) at readelf.c:792
a = 0x7fffffffdda0
#7 0x00007ffff7f17f67 in dwfl_getmodules (dwfl=dwfl@entry=0x7ffff7f5dc10, callback=callback@entry=0x555555575717 <process_dwflmod>, arg=arg@entry=0x7fffffffdda0, offset=offset@entry=0) at dwfl_getmodules.c:86
ok = <optimized out>
m = 0x7ffff7ea38a0
#8 0x000055555556c884 in process_file (fd=fd@entry=3, fname=<optimized out>, only_one=only_one@entry=true) at readelf.c:900
a = {fd = 3, only_one = true}
dwfl = 0x7ffff7f5dc10
#9 0x0000555555567d4c in main (argc=3, argv=0x7fffffffde68) at readelf.c:372
fd = 3
remaining = 2
only_one = <optimized out>
offending code:
printf (ngettext ("\
\nDynamic segment contains %lu entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n",
"\
\nDynamic segment contains %lu entries:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n",
dyn_ents),
(unsigned long int) dyn_ents,
class == ELFCLASS32 ? 10 : 18, shdr->sh_addr,
shdr->sh_offset,
(int) shdr->sh_link,
elf_strptr (ebl->elf, shstrndx, glink->sh_name));