]> granicus.if.org Git - llvm/commitdiff
[AArch64] Fix out of bounds strlen
authorBenjamin Kramer <benny.kra@googlemail.com>
Wed, 23 Jan 2019 14:51:21 +0000 (14:51 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Wed, 23 Jan 2019 14:51:21 +0000 (14:51 +0000)
CFIInst is not zero-terminated. This is one of more annoying functional
differences between StringRef and ArrayRef.

Found by asan.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351955 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/AArch64/AArch64FrameLowering.cpp

index 374056f98997e2bcb0b269f97a2ee8a9e4c9a3f0..8b199fc091a5b6ea60dd000953c42a6f276a8ab5 100644 (file)
@@ -1775,8 +1775,8 @@ bool AArch64FrameLowering::spillCalleeSavedRegisters(
           static_cast<char>(unsigned(dwarf::DW_OP_breg18)),
           static_cast<char>(-8) & 0x7f, // addend (sleb128)
       };
-      unsigned CFIIndex =
-          MF.addFrameInst(MCCFIInstruction::createEscape(nullptr, CFIInst));
+      unsigned CFIIndex = MF.addFrameInst(MCCFIInstruction::createEscape(
+          nullptr, StringRef(CFIInst, sizeof(CFIInst))));
       BuildMI(MBB, MI, DL, TII.get(AArch64::CFI_INSTRUCTION))
           .addCFIIndex(CFIIndex)
           .setMIFlag(MachineInstr::FrameSetup);