File tree Expand file tree Collapse file tree 2 files changed +18
-4
lines changed Expand file tree Collapse file tree 2 files changed +18
-4
lines changed Original file line number Diff line number Diff line change @@ -340,10 +340,9 @@ class SrcSafetyAnalysis {
340
340
341
341
SrcState createEntryState () {
342
342
SrcState S (NumRegs, RegsToTrackInstsFor.getNumTrackedRegisters ());
343
- for (MCPhysReg Reg : BC.MIB ->getTrustedLiveInRegs ()) {
343
+ for (MCPhysReg Reg : BC.MIB ->getTrustedLiveInRegs ())
344
344
S.TrustedRegs |= BC.MIB ->getAliases (Reg, /* OnlySmaller=*/ true );
345
- S.SafeToDerefRegs = S.TrustedRegs ;
346
- }
345
+ S.SafeToDerefRegs = S.TrustedRegs ;
347
346
return S;
348
347
}
349
348
Original file line number Diff line number Diff line change @@ -491,7 +491,22 @@ class AArch64MCPlusBuilder : public MCPlusBuilder {
491
491
492
492
// If signing oracles are considered, the particular value left in the base
493
493
// register after this instruction is important. This function checks that
494
- // if the base register was overwritten, it is due to address write-back.
494
+ // if the base register was overwritten, it is due to address write-back:
495
+ //
496
+ // ; good:
497
+ // autdza x1 ; x1 is authenticated (may fail)
498
+ // ldr x0, [x1, #8] ; x1 is checked and not changed
499
+ // pacdzb x1
500
+ //
501
+ // ; also good:
502
+ // autdza x1
503
+ // ldr x0, [x1, #8]! ; x1 is checked and incremented by 8
504
+ // pacdzb x1
505
+ //
506
+ // ; bad (the value being signed is not the authenticated one):
507
+ // autdza x1
508
+ // ldr x1, [x1, #8] ; x1 is overwritten with an unrelated value
509
+ // pacdzb x1
495
510
//
496
511
// Note that this function is not needed for authentication oracles, as the
497
512
// particular value left in the register after a successful memory access
You can’t perform that action at this time.
0 commit comments