[llvm-branch-commits] [llvm] [BOLT] Gadget scanner: detect signing oracles (PR #134146)
Kristof Beyls via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon Apr 7 06:47:16 PDT 2025
================
@@ -622,6 +628,40 @@ class MCPlusBuilder {
return std::make_pair(getNoRegister(), getNoRegister());
}
+ /// Analyzes if a pointer is checked to be valid by the end of BB.
+ ///
+ /// It is possible for pointer authentication instructions not to terminate
+ /// the program abnormally on authentication failure and return some *invalid
+ /// pointer* instead (like it is done on AArch64 when FEAT_FPAC is not
+ /// implemented). This might be enough to crash on invalid memory access
+ /// when the pointer is later used as the destination of load/store or branch
+ /// instruction. On the other hand, when the pointer is not used right away,
+ /// it may be important for the compiler to check the address explicitly not
+ /// to introduce signing or authentication oracle.
+ ///
+ /// If this function returns a (Reg, Inst) pair, then it is known that in any
+ /// successor of BB either
+ /// * Reg is trusted, provided it was safe-to-dereference before Inst, or
----------------
kbeyls wrote:
I think that "trusted" isn't defined before this sentence?
I'm assuming that "trusted" means "has been authenticated and program termination is guaranteed if authentication failed"?
Maybe we should have a specific term for that?
It seems to me that "trusted" might be a too-generic term, and becomes too confusing to use for this.
Off the top of my head, I'm thinking maybe "fully-authenticated" might work? Not sure if @jacobbramley has a better suggestion?
https://github.com/llvm/llvm-project/pull/134146
More information about the llvm-branch-commits
mailing list