android / android/ndk

[BUG] Clang linker crash (use-after-free?)

Open
#1,817 12 comments 0 reactions 1 assignee Assigned to @pirama-arumuga-nainar View on GitHub
bug
Dominant language
No language data
Stars
2.3k
Forks
310
PR merge metrics
No merged PRs in 30d

Description

### Description

I found the Clang linker crashing when trying to compile a flat binary for ARM. So I made a minimal test case to reproduce the issue.

As the log said "PLEASE submit a bug report", I'm submitting it.

Use this `entry.s`:
```
.data
.global _start
_start:
.long _start(GOT_PREL)
```
And this linker script `test.ld`:
```
ENTRY(_start)
SECTIONS {
.data : { *(.data) }
.shstrtab : { *(.shstrtab) }

/DISCARD/ : { *(*) }
}
```

And here's the commands and the output:
```
$ /path_censored/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi21-clang entry.s -c -o entry.o
$ /path_censored/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi21-clang -nostartfiles -nodefaultlibs -nostdlib -Wl,-T,test.ld entry.o -o test.elf
PLEASE submit a bug report to https://github.com/android-ndk/ndk/issues and include the crash backtrace.
Stack dump:
0. Program arguments: /path_censored/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/ld -pie -EL --warn-shared-textrel -z now -z relro -z max-page-size=4096 -X --hash-style=gnu --hash-style=both --enable-new-dtags --eh-frame-hdr -m armelf_linux_eabi -dynamic-linker /system/bin/linker -o test.elf -L/path_censored/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/14.0.6/lib/linux/arm -L/path_censored/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/../sysroot/usr/lib/arm-linux-androideabi/21 -L/path_censored/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/../sysroot/usr/lib/arm-linux-androideabi -L/path_censored/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/../sysroot/usr/lib/../lib -L/path_censored/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/../sysroot/usr/lib -T test.ld entry.o
#0 0x0000000002a047d8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/path_censored/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/ld+0x2a047d8)
#1 0x0000000002a03940 llvm::sys::RunSignalHandlers() (/path_censored/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/ld+0x2a03940)
#2 0x0000000002a04c2a (/path_censored/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/ld+0x2a04c2a)
#3 0x00007fc051f74520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x000000000232dee9 (/path_censored/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/ld+0x232dee9)
#5 0x000000000233d6a4 (/path_censored/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/ld+0x233d6a4)
#6 0x000000000231e10c (/path_censored/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/ld+0x231e10c)
#7 0x0000000002319f58 void lld::elf::writeResult >() (/path_censored/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/ld+0x2319f58)
#8 0x00000000023198a1 void lld::elf::LinkerDriver::link >(llvm::opt::InputArgList&) (/path_censored/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/ld+0x23198a1)
#9 0x00000000022e09e5 lld::elf::LinkerDriver::linkerMain(llvm::ArrayRef) (/path_censored/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/ld+0x22e09e5)
#10 0x00000000022dfde5 lld::elf::link(llvm::ArrayRef, llvm::raw_ostream&, llvm::raw_ostream&, bool, bool) (/path_censored/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/ld+0x22dfde5)
#11 0x00000000018faf85 (/path_censored/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/ld+0x18faf85)
#12 0x00000000026fb392 main (/path_censored/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/ld+0x26fb392)
```

### Affected versions

r25

### Canary version

_No response_

### Host OS

Linux

### Host OS version

Ubuntu 22.04

### Affected ABIs

armeabi-v7a

### Build system

Other (specify below)

### Other build system

none

### minSdkVersion

none

### Device API level

_No response_

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.