[lld] r315036 - [ELF] Don't crash when parsing a file with out-of-bounds version references
Alexander Richardson via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 5 16:28:35 PDT 2017
Author: arichardson
Date: Thu Oct 5 16:28:34 2017
New Revision: 315036
URL: http://llvm.org/viewvc/llvm-project?rev=315036&view=rev
Log:
[ELF] Don't crash when parsing a file with out-of-bounds version references
Summary:
We were crashing when linking telnetd in FreeBSD because lld was emitting
corrupted output files for --norosegment. In this file the version index of some symbols
was set to 9 but lld only found 8 version definitions.
I am not sure how to create a minimal .so file that also exposes this behaviour so I just added the one that initially caused the error to Inputs/
This partially addresses https://bugs.llvm.org/show_bug.cgi?id=34705
Reviewers: ruiu, rafael, pcc, grimar
Reviewed By: ruiu
Subscribers: emaste, krytarowski
Tags: #lld
Differential Revision: https://reviews.llvm.org/D38397
Modified:
lld/trunk/ELF/InputFiles.cpp
lld/trunk/test/ELF/corrupted-version-reference.s
Modified: lld/trunk/ELF/InputFiles.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputFiles.cpp?rev=315036&r1=315035&r2=315036&view=diff
==============================================================================
--- lld/trunk/ELF/InputFiles.cpp (original)
+++ lld/trunk/ELF/InputFiles.cpp Thu Oct 5 16:28:34 2017
@@ -780,9 +780,7 @@ template <class ELFT> void SharedFile<EL
if (VersymIndex >= Verdefs.size()) {
error("corrupt input file: version definition index " +
Twine(VersymIndex) + " for symbol " + Name +
- " is greater than the maximum value " +
- Twine(Verdefs.size() - 1) + "\n>>> symbol is defined in " +
- toString(this));
+ " is out of bounds\n>>> defined in " + toString(this));
continue;
}
V = Verdefs[VersymIndex];
Modified: lld/trunk/test/ELF/corrupted-version-reference.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/corrupted-version-reference.s?rev=315036&r1=315035&r2=315036&view=diff
==============================================================================
--- lld/trunk/test/ELF/corrupted-version-reference.s (original)
+++ lld/trunk/test/ELF/corrupted-version-reference.s Thu Oct 5 16:28:34 2017
@@ -1,8 +1,8 @@
# RUN: llvm-mc -triple=mips64-unknown-freebsd %s -filetype=obj -o %t.o
# RUN: not ld.lld %t.o %S/Inputs/corrupt-version-reference.so -o %t.exe 2>&1 | FileCheck %s
-# CHECK: error: corrupt input file: version definition index 9 for symbol __cxa_finalize is greater than the maximum value 8
-# CHECK: >>> symbol is defined in {{.+}}/corrupt-version-reference.so
+# CHECK: error: corrupt input file: version definition index 9 for symbol __cxa_finalize is out of bounds
+# CHECK: >>> defined in {{.+}}/corrupt-version-reference.so
.globl __start
__start:
More information about the llvm-commits
mailing list