================ @@ -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