Skip to content

Commit 66db728

Browse files
committed
Add an assertion
1 parent f2608ca commit 66db728

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

bolt/lib/Passes/PAuthGadgetScanner.cpp

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -406,8 +406,9 @@ class SrcSafetyAnalysis {
406406
const MCInst *FirstCheckerInst;
407407
std::tie(CheckedReg, FirstCheckerInst) = CheckerSequenceInfo.at(&Point);
408408

409-
// FirstCheckerInst should belong to the same basic block, meaning
410-
// it was deterministically processed a few steps before this instruction.
409+
// FirstCheckerInst should belong to the same basic block (see the
410+
// assertion in DataflowSrcSafetyAnalysis::run()), meaning it was
411+
// deterministically processed a few steps before this instruction.
411412
const SrcState &StateBeforeChecker =
412413
getStateBefore(*FirstCheckerInst).get();
413414
if (StateBeforeChecker.SafeToDerefRegs[CheckedReg])
@@ -566,15 +567,19 @@ class DataflowSrcSafetyAnalysis
566567
void run() override {
567568
for (BinaryBasicBlock &BB : Func) {
568569
if (auto CheckerInfo = BC.MIB->getAuthCheckedReg(BB)) {
569-
MCInst *LastInstOfChecker = BB.getLastNonPseudoInstr();
570+
MCPhysReg CheckedReg = CheckerInfo->first;
571+
MCInst &FirstInst = *CheckerInfo->second;
572+
MCInst &LastInst = *BB.getLastNonPseudoInstr();
570573
LLVM_DEBUG({
571574
dbgs() << "Found pointer checking sequence in " << BB.getName()
572575
<< ":\n";
573-
traceReg(BC, "Checked register", CheckerInfo->first);
574-
traceInst(BC, "First instruction", *CheckerInfo->second);
575-
traceInst(BC, "Last instruction", *LastInstOfChecker);
576+
traceReg(BC, "Checked register", CheckedReg);
577+
traceInst(BC, "First instruction", FirstInst);
578+
traceInst(BC, "Last instruction", LastInst);
576579
});
577-
CheckerSequenceInfo[LastInstOfChecker] = *CheckerInfo;
580+
assert(llvm::any_of(BB, [&](MCInst &I) { return &I == &FirstInst; }) &&
581+
"Data-flow analysis expects the checker not to cross BBs");
582+
CheckerSequenceInfo[&LastInst] = *CheckerInfo;
578583
}
579584
}
580585
DFParent::run();

0 commit comments

Comments
 (0)