================
@@ -1845,8 +1986,14 @@ class _LIBUNWIND_HIDDEN Registers_arm64 {
 
   uint64_t  getSP() const         { return _registers.__sp; }
   void      setSP(uint64_t value) { _registers.__sp = value; }
-  uint64_t  getIP() const         { return _registers.__pc; }
-  void      setIP(uint64_t value) { _registers.__pc = value; }
+  uint64_t getIP() const { return authPC(&_registers, getDiscriminator()); }
+  void setIP(uint64_t value) {
+    // First authenticate the current value of the IP to ensure the context
----------------
DanielKristofKiss wrote:

unwinding starts from a context which is created by the `__unw_getcontext`. 
Here the authentication ensure the context/registers are still pointing to a 
legitimate address.
without this check any buffer could be used and setIP would just set the 
arbitrary address and where the restore context would happily jump.
If the `value` is altered outside of libunwind then nothing to do here. Here I 
assume rest of the application has no idea about PAC. With PAuthAbi this would 
be different. 

https://github.com/llvm/llvm-project/pull/113368
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to