Bug 21408 - objdump segfault - null pointer dereferencing
Summary: objdump segfault - null pointer dereferencing
Status: RESOLVED FIXED
Alias: None
Product: binutils
Classification: Unclassified
Component: binutils (show other bugs)
Version: 2.28
: P2 normal
Target Milestone: 2.29
Assignee: Alan Modra
URL:
Keywords:
: 21416 (view as bug list)
Depends on:
Blocks:
 
Reported: 2017-04-22 03:34 UTC by Manh-Dung Nguyen
Modified: 2017-04-23 13:33 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments
Crashing input (564 bytes, application/x-object)
2017-04-22 03:34 UTC, Manh-Dung Nguyen
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Manh-Dung Nguyen 2017-04-22 03:34:07 UTC
Created attachment 10005 [details]
Crashing input

Dear All,

This bug was found with AFLGo, a directed version of AFL/AFLFast. Thanks also to Marcel Böhme and Van-Thuan Pham.

This bug was found on Ubuntu 14.04 64-bit & binutils was checked out from main repository at git://sourceware.org/git/binutils-gdb.git. Its commit is a6c21d4a553de184562fd8409a5bcd3f2cc2561a (Wed Apr 19 13:16:05 2017).

binutils was built with ASAN using gcc-6.2 and clang-3.4. The configure command was:

CC=clang CFLAGS="-DFORTIFY_SOURCE=2 -fstack-protector-all -fsanitize=undefined,address -fno-omit-frame-pointer -g -Wno-error" ../configure --disable-shared --disable-gdb --disable-libdecnumber --disable-readline --disable-sim

To reproduce:
Download the attached file - bug3
objdump -WL bug3

ASAN says:
==148381==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x00000060fc56 bp 0x7fffd13821b0 sp 0x7fffd13805a0 T0)
    #0 0x60fc55 in display_debug_lines_decoded /home/ubuntu/binutils-analysis/binutils-gdb/obj-asan/binutils/../../binutils/dwarf.c:3813:8
    #1 0x56ef61 in display_debug_lines /home/ubuntu/binutils-analysis/binutils-gdb/obj-asan/binutils/../../binutils/dwarf.c:4195:21
    #2 0x52f2c4 in dump_dwarf_section /home/ubuntu/binutils-analysis/binutils-gdb/obj-asan/binutils/../../binutils/objdump.c:2618:6
    #3 0x9e4315 in bfd_map_over_sections /home/ubuntu/binutils-analysis/binutils-gdb/obj-asan/bfd/../../bfd/section.c:1395:5
    #4 0x4e0652 in dump_dwarf /home/ubuntu/binutils-analysis/binutils-gdb/obj-asan/binutils/../../binutils/objdump.c:2684:3
    #5 0x4d7539 in dump_bfd /home/ubuntu/binutils-analysis/binutils-gdb/obj-asan/binutils/../../binutils/objdump.c:3522:5
    #6 0x4d5fe8 in display_object_bfd /home/ubuntu/binutils-analysis/binutils-gdb/obj-asan/binutils/../../binutils/objdump.c:3589:7
    #7 0x4d5dcc in display_any_bfd /home/ubuntu/binutils-analysis/binutils-gdb/obj-asan/binutils/../../binutils/objdump.c:3678:5
    #8 0x4d45f3 in display_file /home/ubuntu/binutils-analysis/binutils-gdb/obj-asan/binutils/../../binutils/objdump.c:3699:3
    #9 0x4d26d3 in main /home/ubuntu/binutils-analysis/binutils-gdb/obj-asan/binutils/../../binutils/objdump.c:4001:6
    #10 0x7f041d2a2f44 in __libc_start_main /build/eglibc-oGUzwX/eglibc-2.19/csu/libc-start.c:287
    #11 0x4cb13c in _start (/home/ubuntu/binutils-analysis/binutils-gdb/obj-asan/binutils/objdump+0x4cb13c)

VALGRIND says:
==148383== Invalid read of size 8
==148383==    at 0x416644: display_debug_lines_decoded (dwarf.c:3813)
==148383==    by 0x4177A9: display_debug_lines (dwarf.c:4195)
==148383==    by 0x407DE2: dump_dwarf_section (objdump.c:2618)
==148383==    by 0x469C57: bfd_map_over_sections (section.c:1395)
==148383==    by 0x407F43: dump_dwarf (objdump.c:2684)
==148383==    by 0x409E26: dump_bfd (objdump.c:3522)
==148383==    by 0x40A02E: display_object_bfd (objdump.c:3589)
==148383==    by 0x40A270: display_any_bfd (objdump.c:3678)
==148383==    by 0x40A2E4: display_file (objdump.c:3699)
==148383==    by 0x40ABB7: main (objdump.c:4001)
==148383==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==148383== 
==148383== 
==148383== Process terminating with default action of signal 11 (SIGSEGV)
==148383==  Access not within mapped region at address 0x0
==148383==    at 0x416644: display_debug_lines_decoded (dwarf.c:3813)
==148383==    by 0x4177A9: display_debug_lines (dwarf.c:4195)
==148383==    by 0x407DE2: dump_dwarf_section (objdump.c:2618)
==148383==    by 0x469C57: bfd_map_over_sections (section.c:1395)
==148383==    by 0x407F43: dump_dwarf (objdump.c:2684)
==148383==    by 0x409E26: dump_bfd (objdump.c:3522)
==148383==    by 0x40A02E: display_object_bfd (objdump.c:3589)
==148383==    by 0x40A270: display_any_bfd (objdump.c:3678)
==148383==    by 0x40A2E4: display_file (objdump.c:3699)
==148383==    by 0x40ABB7: main (objdump.c:4001)
Comment 1 Alan Modra 2017-04-23 04:03:51 UTC
*** Bug 21416 has been marked as a duplicate of this bug. ***
Comment 2 Sourceware Commits 2017-04-23 11:53:45 UTC
The master branch has been updated by Alan Modra <amodra@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=f082820db966c79e47a143da774700055a1fad41

commit f082820db966c79e47a143da774700055a1fad41
Author: Alan Modra <amodra@gmail.com>
Date:   Sun Apr 23 13:49:50 2017 +0930

    PR 21408, segfault in display_debug_lines_decoded
    
    	PR 21408
    	* dwarf.c (display_debug_lines_decoded): Don't segfault on NULL
    	file_table.
Comment 3 Alan Modra 2017-04-23 13:33:30 UTC
Fixed