[lld] d7cbfcf - [ELF][AArch64] Fix potentially corrupted section content for PAC

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 5 18:24:57 PDT 2022


Author: Fangrui Song
Date: 2022-08-05T18:24:54-07:00
New Revision: d7cbfcf36ace575ec90434624279dd3ebce78c47

URL: https://github.com/llvm/llvm-project/commit/d7cbfcf36ace575ec90434624279dd3ebce78c47
DIFF: https://github.com/llvm/llvm-project/commit/d7cbfcf36ace575ec90434624279dd3ebce78c47.diff

LOG: [ELF][AArch64] Fix potentially corrupted section content for PAC

D74537 introduced a bug: if `(config->andFeatures & GNU_PROPERTY_AARCH64_FEATURE_1_PAC) != 0`
with -z pac-plt unspecified, we incorrectly use AArch64BtiPac, whose writePlt will make
out-of-bounds write after the .plt section. This is often benign because the
output section after .plt will usually overwrite the content.

This is very difficult to test without D131247 (Parallelize writes of different OutputSections).

Added: 
    

Modified: 
    lld/ELF/Arch/AArch64.cpp

Removed: 
    


################################################################################
diff  --git a/lld/ELF/Arch/AArch64.cpp b/lld/ELF/Arch/AArch64.cpp
index 807e5dda9d5b1..fc564ab6f15a0 100644
--- a/lld/ELF/Arch/AArch64.cpp
+++ b/lld/ELF/Arch/AArch64.cpp
@@ -884,8 +884,8 @@ void AArch64BtiPac::writePlt(uint8_t *buf, const Symbol &sym,
 }
 
 static TargetInfo *getTargetInfo() {
-  if (config->andFeatures & (GNU_PROPERTY_AARCH64_FEATURE_1_BTI |
-                             GNU_PROPERTY_AARCH64_FEATURE_1_PAC)) {
+  if ((config->andFeatures & GNU_PROPERTY_AARCH64_FEATURE_1_BTI) ||
+      config->zPacPlt) {
     static AArch64BtiPac t;
     return &t;
   }


        


More information about the llvm-commits mailing list