public inbox for elfutils@sourceware.org
 help / color / mirror / Atom feed
From: Evgeny Vereshchagin <evverx@gmail.com>
To: elfutils-devel@sourceware.org
Subject: MemorySanitizer: Use-of-uninitialized-value in check_section
Date: Sun, 19 Feb 2023 21:34:52 +0300	[thread overview]
Message-ID: <CAKKs9ui6j_=xiNFkS+mPTbTS6uEqS7XzfDoxugPot2uLHi9xUg@mail.gmail.com> (raw)

Hi,

OSS-Fuzz found https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=56134
introduced in fda09f5f188fb173b2123815be71ca4647a8adfb but for some
reason it wasn't delivered to the mailing list. I opened
https://github.com/google/oss-fuzz/issues/9755 to figure out what went
wrong there but until then below is the full backtrace:
```
==2272==WARNING: MemorySanitizer: use-of-uninitialized-value
#0 0x5fb3c7 in check_section /src/elfutils/libdw/dwarf_begin_elf.c:265:7
#1 0x5f8d3e in global_read /src/elfutils/libdw/dwarf_begin_elf.c:444:14
#2 0x5f8d3e in dwarf_begin_elf /src/elfutils/libdw/dwarf_begin_elf.c:595:9
#3 0x53f28c in load_dw /src/elfutils/libdwfl/dwfl_module_getdwarf.c:1341:13
#4 0x53c5b9 in find_dw /src/elfutils/libdwfl/dwfl_module_getdwarf.c:1391:16
#5 0x53c5b9 in dwfl_module_getdwarf
/src/elfutils/libdwfl/dwfl_module_getdwarf.c:1446:3
#6 0x534b72 in LLVMFuzzerTestOneInput /src/fuzz-libdwfl.c:54:3
#7 0x43dcf3 in fuzzer::Fuzzer::ExecuteCallback(unsigned char const*,
unsigned long) /src/llvm-project/compiler-rt/lib/fuzzer/FuzzerLoop.cpp:611:15
#8 0x429452 in fuzzer::RunOneTest(fuzzer::Fuzzer*, char const*,
unsigned long) /src/llvm-project/compiler-rt/lib/fuzzer/FuzzerDriver.cpp:324:6
#9 0x42ecfc in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned
char const*, unsigned long))
/src/llvm-project/compiler-rt/lib/fuzzer/FuzzerDriver.cpp:860:9
#10 0x458232 in main
/src/llvm-project/compiler-rt/lib/fuzzer/FuzzerMain.cpp:20:10
#11 0x7fe0978dd0b2 in __libc_start_main
/build/glibc-eX1tMB/glibc-2.31/csu/libc-start.c:308:16
#12 0x41f61d in _start
Uninitialized value was created by a heap allocation
#0 0x4e2310 in __interceptor_malloc
/src/llvm-project/compiler-rt/lib/msan/msan_interceptors.cpp:895:3
#1 0x6b9935 in convert_data /src/elfutils/libelf/elf_getdata.c:166:24
#2 0x6b9935 in __libelf_set_data_list_rdlock
/src/elfutils/libelf/elf_getdata.c:455:7
#3 0x6ba571 in __elf_getdata_rdlock /src/elfutils/libelf/elf_getdata.c:562:5
#4 0x6ba6cd in elf_getdata /src/elfutils/libelf/elf_getdata.c:580:12
#5 0x5faec7 in check_section /src/elfutils/libdw/dwarf_begin_elf.c:246:20
#6 0x5f8d3e in global_read /src/elfutils/libdw/dwarf_begin_elf.c:444:14
#7 0x5f8d3e in dwarf_begin_elf /src/elfutils/libdw/dwarf_begin_elf.c:595:9
#8 0x53f28c in load_dw /src/elfutils/libdwfl/dwfl_module_getdwarf.c:1341:13
#9 0x53c5b9 in find_dw /src/elfutils/libdwfl/dwfl_module_getdwarf.c:1391:16
#10 0x53c5b9 in dwfl_module_getdwarf
/src/elfutils/libdwfl/dwfl_module_getdwarf.c:1446:3
#11 0x534b72 in LLVMFuzzerTestOneInput /src/fuzz-libdwfl.c:54:3
#12 0x43dcf3 in fuzzer::Fuzzer::ExecuteCallback(unsigned char const*,
unsigned long) /src/llvm-project/compiler-rt/lib/fuzzer/FuzzerLoop.cpp:611:15
#13 0x429452 in fuzzer::RunOneTest(fuzzer::Fuzzer*, char const*,
unsigned long) /src/llvm-project/compiler-rt/lib/fuzzer/FuzzerDriver.cpp:324:6
#14 0x42ecfc in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned
char const*, unsigned long))
/src/llvm-project/compiler-rt/lib/fuzzer/FuzzerDriver.cpp:860:9
#15 0x458232 in main
/src/llvm-project/compiler-rt/lib/fuzzer/FuzzerMain.cpp:20:10
#16 0x7fe0978dd0b2 in __libc_start_main
/build/glibc-eX1tMB/glibc-2.31/csu/libc-start.c:308:16
SUMMARY: MemorySanitizer: use-of-uninitialized-value
(/mnt/scratch0/clusterfuzz/bot/builds/clusterfuzz-builds_elfutils_3ee01cb67db1a71e7adeb7f3f14722ea62f13cd5/revisions/fuzz-libdwfl+0x5fb3c7)
```

It can be reproduced with `readelf` and `valgrind`
```
wget -O OSS-FUZZ-56134
'https://oss-fuzz.com/download?testcase_id=6724057145147392'

LD_LIBRARY_PATH="$(pwd)/libdw:$(pwd)/libelf" DEBUGINFOD_URLS= valgrind
--track-origins=yes ./src/readelf -w OSS-FUZZ-56134
==1373524== Memcheck, a memory error detector
==1373524== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
==1373524== Using Valgrind-3.19.0 and LibVEX; rerun with -h for copyright info
==1373524== Command: ./src/readelf -w OSS-FUZZ-56134
==1373524==
==1373524== Conditional jump or move depends on uninitialised value(s)
==1373524== at 0x4887EAB: check_section (dwarf_begin_elf.c:265)
==1373524== by 0x48885EF: global_read (dwarf_begin_elf.c:444)
==1373524== by 0x48885EF: dwarf_begin_elf (dwarf_begin_elf.c:595)
==1373524== by 0x48A9F0C: load_dw (dwfl_module_getdwarf.c:1341)
==1373524== by 0x48AA0D0: find_dw (dwfl_module_getdwarf.c:1391)
==1373524== by 0x48AA0D0: dwfl_module_getdwarf (dwfl_module_getdwarf.c:1446)
==1373524== by 0x411109: print_debug (readelf.c:11467)
==1373524== by 0x413A31: process_elf_file (readelf.c:1062)
==1373524== by 0x4148BC: process_dwflmod (readelf.c:818)
==1373524== by 0x48A7F20: dwfl_getmodules (dwfl_getmodules.c:86)
==1373524== by 0x40954A: process_file (readelf.c:926)
==1373524== by 0x404D0E: main (readelf.c:395)
==1373524== Uninitialised value was created by a heap allocation
==1373524== at 0x484586F: malloc (vg_replace_malloc.c:381)
==1373524== by 0x48FEA25: convert_data (elf_getdata.c:166)
==1373524== by 0x48FEA25: __libelf_set_data_list_rdlock (elf_getdata.c:455)
==1373524== by 0x48FEC17: __elf_getdata_rdlock (elf_getdata.c:562)
==1373524== by 0x4887E6F: check_section (dwarf_begin_elf.c:246)
==1373524== by 0x48885EF: global_read (dwarf_begin_elf.c:444)
==1373524== by 0x48885EF: dwarf_begin_elf (dwarf_begin_elf.c:595)
==1373524== by 0x48A9F0C: load_dw (dwfl_module_getdwarf.c:1341)
==1373524== by 0x48AA0D0: find_dw (dwfl_module_getdwarf.c:1391)
==1373524== by 0x48AA0D0: dwfl_module_getdwarf (dwfl_module_getdwarf.c:1446)
==1373524== by 0x411109: print_debug (readelf.c:11467)
==1373524== by 0x413A31: process_elf_file (readelf.c:1062)
==1373524== by 0x4148BC: process_dwflmod (readelf.c:818)
==1373524== by 0x48A7F20: dwfl_getmodules (dwfl_getmodules.c:86)
==1373524== by 0x40954A: process_file (readelf.c:926)
==1373524==
./src/readelf: cannot get debug context descriptor: No DWARF information found
```

Thanks,
Evgeny Vereshchagin

             reply	other threads:[~2023-02-20 10:33 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-19 18:34 Evgeny Vereshchagin [this message]
2023-02-20 11:06 ` Mark Wielaard

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAKKs9ui6j_=xiNFkS+mPTbTS6uEqS7XzfDoxugPot2uLHi9xUg@mail.gmail.com' \
    --to=evverx@gmail.com \
    --cc=elfutils-devel@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).