Replying to this email means your email address will be shared with the
team that works on this product.
https://issues.oss-fuzz.com/issues/443254909

Changed

[email protected] added comment #2:
I haven't been able to reproduce it locally with the toolchain provided by
OSS-Fuzz but Valgrind reports invalid reads pointing to the place OSS-Fuzz
reports:
```
autoreconf -i -f
./configure --enable-maintainer-mode
make V=1
wget -O TESTCASE-443254909
https://oss-fuzz.com/download?testcase_id=5817803392483328
LD_LIBRARY_PATH=$(pwd)/libdw:$(pwd)/libelf DEBUGINFOD_URLS= valgrind
./src/readelf -a TESTCASE-443254909
```
```
==229051== Memcheck, a memory error detector
==229051== Copyright (C) 2002-2024, and GNU GPL'd, by Julian Seward et al.
==229051== Using Valgrind-3.25.1 and LibVEX; rerun with -h for copyright
info
==229051== Command: ./src/readelf -a TESTCASE-443254909
==229051==
==229051== Invalid read of size 8
==229051==    at 0x490C6C2: __bswap_64 (byteswap.h:73)
==229051==    by 0x490C6C2: __elf64_getphdr_wrlock.part.0
(elf32_getphdr.c:167)
==229051==    by 0x490CA39: gelf_getphdr (gelf_getphdr.c:111)
==229051==    by 0x4898BFB: __libdwfl_elf_address_range
(dwfl_report_elf.c:183)
==229051==    by 0x4898F20: __libdwfl_report_elf (dwfl_report_elf.c:247)
==229051==    by 0x489B4DB: process_elf (offline.c:137)
==229051==    by 0x489B4DB: process_file (offline.c:125)
==229051==    by 0x489B680: process_archive_member (offline.c:235)
==229051==    by 0x489B680: process_archive (offline.c:265)
==229051==    by 0x489B680: process_file (offline.c:128)
==229051==    by 0x489B680: process_archive_member (offline.c:235)
==229051==    by 0x489B680: process_archive (offline.c:265)
==229051==    by 0x489B680: process_file (offline.c:128)
==229051==    by 0x489B680: process_archive_member (offline.c:235)
==229051==    by 0x489B680: process_archive (offline.c:265)
==229051==    by 0x489B680: process_file (offline.c:128)
==229051==    by 0x489B680: process_archive_member (offline.c:235)
==229051==    by 0x489B680: process_archive (offline.c:265)
==229051==    by 0x489B680: process_file (offline.c:128)
==229051==    by 0x489B680: process_archive_member (offline.c:235)
==229051==    by 0x489B680: process_archive (offline.c:265)
==229051==    by 0x489B680: process_file (offline.c:128)
==229051==    by 0x489B680: process_archive_member (offline.c:235)
==229051==    by 0x489B680: process_archive (offline.c:265)
==229051==    by 0x489B680: process_file (offline.c:128)
==229051==    by 0x489B680: process_archive_member (offline.c:235)
==229051==    by 0x489B680: process_archive (offline.c:265)
==229051==    by 0x489B680: process_file (offline.c:128)
==229051==  Address 0x4935ff9 is in a rw- mapped file
/home/vagrant/elfutils/TESTCASE-443254909 segment
==229051==
==229051==
==229051== Process terminating with default action of signal 11 (SIGSEGV):
dumping core
==229051==  Access not within mapped region at address 0x4936000
==229051==    at 0x490C6C2: __bswap_64 (byteswap.h:73)
==229051==    by 0x490C6C2: __elf64_getphdr_wrlock.part.0
(elf32_getphdr.c:167)
==229051==    by 0x490CA39: gelf_getphdr (gelf_getphdr.c:111)
==229051==    by 0x4898BFB: __libdwfl_elf_address_range
(dwfl_report_elf.c:183)
==229051==    by 0x4898F20: __libdwfl_report_elf (dwfl_report_elf.c:247)
==229051==    by 0x489B4DB: process_elf (offline.c:137)
==229051==    by 0x489B4DB: process_file (offline.c:125)
==229051==    by 0x489B680: process_archive_member (offline.c:235)
==229051==    by 0x489B680: process_archive (offline.c:265)
==229051==    by 0x489B680: process_file (offline.c:128)
==229051==    by 0x489B680: process_archive_member (offline.c:235)
==229051==    by 0x489B680: process_archive (offline.c:265)
==229051==    by 0x489B680: process_file (offline.c:128)
==229051==    by 0x489B680: process_archive_member (offline.c:235)
==229051==    by 0x489B680: process_archive (offline.c:265)
==229051==    by 0x489B680: process_file (offline.c:128)
==229051==    by 0x489B680: process_archive_member (offline.c:235)
==229051==    by 0x489B680: process_archive (offline.c:265)
==229051==    by 0x489B680: process_file (offline.c:128)
==229051==    by 0x489B680: process_archive_member (offline.c:235)
==229051==    by 0x489B680: process_archive (offline.c:265)
==229051==    by 0x489B680: process_file (offline.c:128)
==229051==    by 0x489B680: process_archive_member (offline.c:235)
==229051==    by 0x489B680: process_archive (offline.c:265)
==229051==    by 0x489B680: process_file (offline.c:128)
==229051==    by 0x489B680: process_archive_member (offline.c:235)
==229051==    by 0x489B680: process_archive (offline.c:265)
==229051==    by 0x489B680: process_file (offline.c:128)
==229051==  If you believe this happened as a result of a stack
==229051==  overflow in your program's main thread (unlikely but
==229051==  possible), you can try to increase the size of the
==229051==  main thread stack using the --main-stacksize= flag.
==229051==  The main thread stack size used in this run was 8388608.
==229051==
==229051== HEAP SUMMARY:
==229051==     in use at exit: 41,332 bytes in 444 blocks
==229051==   total heap usage: 647 allocs, 203 frees, 54,722 bytes allocated
==229051==
==229051== LEAK SUMMARY:
==229051==    definitely lost: 0 bytes in 0 blocks
==229051==    indirectly lost: 0 bytes in 0 blocks
==229051==      possibly lost: 0 bytes in 0 blocks
==229051==    still reachable: 41,332 bytes in 444 blocks
==229051==         suppressed: 0 bytes in 0 blocks
==229051== Rerun with --leak-check=full to see details of leaked memory
==229051==
==229051== For lists of detected and suppressed errors, rerun with: -s
==229051== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
Segmentation fault (core dumped)
```

Just in case here is the backtrace OSS-Fuzz reported when it ran
https://github.com/google/oss-fuzz/blob/master/projects/elfutils/fuzz-libdwfl.c with
the testcase downloaded from
https://oss-fuzz.com/testcase?key=5817803392483328:
```
==399==ERROR: UndefinedBehaviorSanitizer: SEGV on unknown address
0x7a4421539000 (pc 0x7a4423632963 bp 0x7ffca8cec3d0 sp 0x7ffca8cec378 T399)
        ==399==The signal is caused by a READ memory access.
            #0 0x7a4423632963 in memmove-vec-unaligned-erms.S:262
/build/glibc-LcI20x/glibc-2.31/sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:262
            #1 0x5ad2e0f6ab6d in memcpy
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:34:10
            #2 0x5ad2e0f6ab6d in __elf64_getphdr_wrlock
/src/elfutils/libelf/elf32_getphdr.c:155:9
            #3 0x5ad2e0f5d1c5 in gelf_getphdr
/src/elfutils/libelf/gelf_getphdr.c:111:11
            #4 0x5ad2e0f1942f in __libdwfl_elf_address_range
/src/elfutils/libdwfl/dwfl_report_elf.c:183:30
            #5 0x5ad2e0f19c74 in __libdwfl_report_elf
/src/elfutils/libdwfl/dwfl_report_elf.c:247:9
            #6 0x5ad2e0e92785 in process_elf
/src/elfutils/libdwfl/offline.c:137:22
            #7 0x5ad2e0e92785 in process_file
/src/elfutils/libdwfl/offline.c:125:14
            #8 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #9 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #10 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #11 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #12 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #13 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #14 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #15 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #16 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #17 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #18 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #19 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #20 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #21 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #22 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #23 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #24 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #25 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #26 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #27 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #28 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #29 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #30 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #31 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #32 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #33 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #34 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #35 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #36 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #37 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #38 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #39 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #40 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #41 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #42 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #43 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #44 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #45 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #46 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #47 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #48 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #49 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #50 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #51 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #52 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #53 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #54 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #55 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #56 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #57 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #58 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #59 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #60 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #61 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #62 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #63 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #64 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #65 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #66 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #67 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #68 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #69 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #70 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #71 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #72 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #73 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #74 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #75 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #76 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #77 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #78 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #79 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #80 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #81 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #82 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #83 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #84 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #85 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #86 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #87 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #88 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #89 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #90 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #91 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #92 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #93 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #94 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #95 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #96 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #97 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #98 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #99 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #100 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #101 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #102 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #103 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #104 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #105 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #106 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #107 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #108 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #109 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #110 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #111 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #112 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #113 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #114 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #115 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #116 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #117 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #118 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #119 0x5ad2e0e92ae9 in process_archive_member
/src/elfutils/libdwfl/offline.c:235:10
            #120 0x5ad2e0e92ae9 in process_archive
/src/elfutils/libdwfl/offline.c:265:10
            #121 0x5ad2e0e92ae9 in process_file
/src/elfutils/libdwfl/offline.c:128:14
            #122 0x5ad2e0e92eac in __libdwfl_report_offline
/src/elfutils/libdwfl/offline.c:295:22
            #123 0x5ad2e0e92eac in dwfl_report_offline
/src/elfutils/libdwfl/offline.c:324:10
            #124 0x5ad2e0e90679 in LLVMFuzzerTestOneInput
/src/fuzz-libdwfl.c:53:22
            #125 0x5ad2e0df2a20 in fuzzer::Fuzzer::ExecuteCallback(unsigned
char const*, unsigned long)
/src/llvm-project/compiler-rt/lib/fuzzer/FuzzerLoop.cpp:614:13
            #126 0x5ad2e0dddc95 in fuzzer::RunOneTest(fuzzer::Fuzzer*, char
const*, unsigned long)
/src/llvm-project/compiler-rt/lib/fuzzer/FuzzerDriver.cpp:327:6
            #127 0x5ad2e0de372f in fuzzer::FuzzerDriver(int*, char***, int
(*)(unsigned char const*, unsigned long))
/src/llvm-project/compiler-rt/lib/fuzzer/FuzzerDriver.cpp:862:9
            #128 0x5ad2e0e0e9d2 in main
/src/llvm-project/compiler-rt/lib/fuzzer/FuzzerMain.cpp:20:10
            #129 0x7a44234cb082 in __libc_start_main
/build/glibc-LcI20x/glibc-2.31/csu/libc-start.c:308:16
            #130 0x5ad2e0dd5e7d in _start

        UndefinedBehaviorSanitizer can not provide additional info.
        SUMMARY: UndefinedBehaviorSanitizer: SEGV
(/lib/x86_64-linux-gnu/libc.so.6+0x18b963) (BuildId:
0702430aef5fa3dda43986563e9ffcc47efbd75e)
        ==399==ABORTING
```
_______________________________

Reference Info: 443254909 elfutils:fuzz-libdwfl: Crash in
__elf64_getphdr_wrlock
component:  Public Trackers > 1362134 > OSS Fuzz
status:  New
reporter:  [email protected]
cc:  [email protected], [email protected], [email protected],
and 1 more
collaborators:  [email protected]
type:  Vulnerability
access level:  Default access
priority:  P2
severity:  S2
hotlist:  Reproducible, Stability-UndefinedBehaviorSanitizer
retention:  Component default
Project:  elfutils
Reported:  Sep 5, 2025


Generated by Google IssueTracker notification system.

Reply via email to