https://sourceware.org/bugzilla/show_bug.cgi?id=32663
Bug ID: 32663
Summary: ld heap-buffer-overflow in cache_bread_1
(bfd/cache.c:355:11)
Product: binutils
Version: 2.45 (HEAD)
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: ld
Assignee: unassigned at sourceware dot org
Reporter: swj22 at mails dot tsinghua.edu.cn
Target Milestone: ---
Created attachment 15933
--> https://sourceware.org/bugzilla/attachment.cgi?id=15933&action=edit
poc
**Description**
A segv can occur in ld when using the -h options with a specially crafted
input file. This issue leads to head-buffer-overflow.
**Affected Version**
GNU ld (GNU Binutils) 2.45 (HEAD) Commit
66e701c09229d389f4046fddae586278fe3e014f
**Steps to Reproduce**
Build binutils 2.45 (HEAD) Commit 66e701c09229d389f4046fddae586278fe3e014f
with AddressSanitizer (e.g., CFLAGS="-g -fsanitize=address" ./configure && make
-j).
Run the following command:
/tmp/binutils-gdb/bins/bin/ld -h filename /tmp/poc
/tmp/binutils-gdb/bins/bin/ld: warning: /tmp/poc has a section extending past
end of file
/tmp/binutils-gdb/bins/bin/ld: warning: cannot find entry symbol _start;
defaulting to 0000000000401000
=================================================================
==1298061==ERROR: AddressSanitizer: heap-buffer-overflow on address
0x60b000000f1a at pc 0x56524c79f67e bp 0x7ffef7c860a0 sp 0x7ffef7c85870
WRITE of size 176 at 0x60b000000f1a thread T0
#0 0x56524c79f67d in fread (/tmp/binutils-gdb/bins/bin/ld+0x3a167d)
(BuildId: 10d4dd0ec0a37f5a)
#1 0x56524c94a329 in cache_bread_1 /tmp/binutils-gdb/bfd/cache.c:355:11
#2 0x56524c9498fc in cache_bread /tmp/binutils-gdb/bfd/cache.c:399:21
#3 0x56524c9331c8 in bfd_read /tmp/binutils-gdb/bfd/bfdio.c:369:11
#4 0x56524c952229 in _bfd_generic_get_section_contents
/tmp/binutils-gdb/bfd/libbfd.c:1330:7
#5 0x56524c974029 in bfd_get_section_contents
/tmp/binutils-gdb/bfd/section.c:1640:10
#6 0x56524c938a8f in bfd_get_full_section_contents
/tmp/binutils-gdb/bfd/compress.c:772:12
#7 0x56524cb4764c in bfd_simple_get_relocated_section_contents
/tmp/binutils-gdb/bfd/simple.c:221:12
#8 0x56524cb49783 in _bfd_dwarf2_slurp_debug_info
/tmp/binutils-gdb/bfd/./dwarf2.c:5555:10
#9 0x56524cb4e0bb in _bfd_dwarf2_find_nearest_line_with_alt
/tmp/binutils-gdb/bfd/./dwarf2.c:5818:9
#10 0x56524ca5746d in _bfd_elf_find_nearest_line_with_alt
/tmp/binutils-gdb/bfd/elf.c:9854:7
#11 0x56524ca5721c in _bfd_elf_find_nearest_line
/tmp/binutils-gdb/bfd/elf.c:9831:10
#12 0x56524c8cb324 in vfinfo /tmp/binutils-gdb/ld/ldmisc.c:342:10
#13 0x56524c8cdd0d in einfo /tmp/binutils-gdb/ld/ldmisc.c:618:3
#14 0x56524c8b6016 in reloc_overflow /tmp/binutils-gdb/ld/./ldmain.c:1596:3
#15 0x56524c9ad0b2 in elf_x86_64_relocate_section
/tmp/binutils-gdb/bfd/elf64-x86-64.c:4960:8
#16 0x56524cae40be in elf_link_input_bfd
/tmp/binutils-gdb/bfd/elflink.c:11903:10
#17 0x56524cad5f62 in bfd_elf_final_link
/tmp/binutils-gdb/bfd/elflink.c:13161:11
#18 0x56524c8b745e in ldwrite /tmp/binutils-gdb/ld/ldwrite.c:548:8
#19 0x56524c8b1a81 in main /tmp/binutils-gdb/ld/./ldmain.c:560:3
#20 0x7efe4d321082 in __libc_start_main
/build/glibc-LcI20x/glibc-2.31/csu/../csu/libc-start.c:308:16
#21 0x56524c783e6d in _start (/tmp/binutils-gdb/bins/bin/ld+0x385e6d)
(BuildId: 10d4dd0ec0a37f5a)
0x60b000000f1a is located 0 bytes to the right of 106-byte region
[0x60b000000eb0,0x60b000000f1a)
allocated by thread T0 here:
#0 0x56524c80657e in malloc (/tmp/binutils-gdb/bins/bin/ld+0x40857e)
(BuildId: 10d4dd0ec0a37f5a)
#1 0x56524c94dfe2 in bfd_malloc /tmp/binutils-gdb/bfd/libbfd.c:291:9
#2 0x56524cb495c1 in _bfd_dwarf2_slurp_debug_info
/tmp/binutils-gdb/bfd/./dwarf2.c:5540:49
#3 0x56524cb4e0bb in _bfd_dwarf2_find_nearest_line_with_alt
/tmp/binutils-gdb/bfd/./dwarf2.c:5818:9
#4 0x56524ca5746d in _bfd_elf_find_nearest_line_with_alt
/tmp/binutils-gdb/bfd/elf.c:9854:7
#5 0x56524ca5721c in _bfd_elf_find_nearest_line
/tmp/binutils-gdb/bfd/elf.c:9831:10
#6 0x56524c8cb324 in vfinfo /tmp/binutils-gdb/ld/ldmisc.c:342:10
#7 0x56524c8cdd0d in einfo /tmp/binutils-gdb/ld/ldmisc.c:618:3
#8 0x56524c8b6016 in reloc_overflow /tmp/binutils-gdb/ld/./ldmain.c:1596:3
#9 0x56524c9ad0b2 in elf_x86_64_relocate_section
/tmp/binutils-gdb/bfd/elf64-x86-64.c:4960:8
#10 0x56524cae40be in elf_link_input_bfd
/tmp/binutils-gdb/bfd/elflink.c:11903:10
#11 0x56524cad5f62 in bfd_elf_final_link
/tmp/binutils-gdb/bfd/elflink.c:13161:11
#12 0x56524c8b745e in ldwrite /tmp/binutils-gdb/ld/ldwrite.c:548:8
#13 0x56524c8b1a81 in main /tmp/binutils-gdb/ld/./ldmain.c:560:3
#14 0x7efe4d321082 in __libc_start_main
/build/glibc-LcI20x/glibc-2.31/csu/../csu/libc-start.c:308:16
SUMMARY: AddressSanitizer: heap-buffer-overflow
(/tmp/binutils-gdb/bins/bin/ld+0x3a167d) (BuildId: 10d4dd0ec0a37f5a) in fread
Shadow bytes around the buggy address:
0x0c167fff8190: fa fa fa fa 00 00 00 00 00 00 00 00 00 00 00 00
0x0c167fff81a0: 00 fa fa fa fa fa fa fa fa fa 00 00 00 00 00 00
0x0c167fff81b0: 00 00 00 00 00 00 00 00 fa fa fa fa fa fa fa fa
0x0c167fff81c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 fa fa fa
0x0c167fff81d0: fa fa fa fa fa fa 00 00 00 00 00 00 00 00 00 00
=>0x0c167fff81e0: 00 00 00[02]fa fa fa fa fa fa fa fa fa fa fa fa
0x0c167fff81f0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c167fff8200: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c167fff8210: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c167fff8220: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c167fff8230: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
==1298061==ABORTING
** Env **
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal
--
You are receiving this mail because:
You are on the CC list for the bug.