[llvm] [llvm-exegesis][AArch64] Check for PAC keys before disabling them (PR #138643)
Abhilash Majumder via llvm-commits
llvm-commits at lists.llvm.org
Fri May 9 01:52:49 PDT 2025
================
@@ -207,15 +207,28 @@ class ExegesisAArch64Target : public ExegesisTarget {
if (isPointerAuth(Opcode)) {
#if defined(__aarch64__) && defined(__linux__)
+
+ // For some systems with existing PAC keys set, it is better to
+ // check the existing state of the key before setting it.
+ // For systems without PAC, this is a No-op but with PAC, it is
+ // safer to check the existing key state and then disable/enable them.
+ // Hence the guard for switching.
+ unsigned long PacKeys = 0;
+ if (prctl(PR_PAC_GET_ENABLED_KEYS, &PacKeys, 0, 0, 0) < 0) {
+ return "Failed to get PAC key status";
+ }
+
// Disable all PAC keys. Note that while we expect the measurements to
// be the same with PAC keys disabled, they could potentially be lower
// since authentication checks are bypassed.
- if (prctl(PR_PAC_SET_ENABLED_KEYS,
- PR_PAC_APIAKEY | PR_PAC_APIBKEY | PR_PAC_APDAKEY |
- PR_PAC_APDBKEY, // all keys
- 0, // disable all
- 0, 0) < 0) {
- return "Failed to disable PAC keys";
+ if (PacKeys != 0) {
+ if (prctl(PR_PAC_SET_ENABLED_KEYS,
+ PR_PAC_APIAKEY | PR_PAC_APIBKEY | PR_PAC_APDAKEY |
+ PR_PAC_APDBKEY, // all keys
+ 0, // disable all
+ 0, 0) < 0) {
----------------
abhilash1910 wrote:
Thanks for the descriptive details , have put a error check for EINVAL and also applied the above refactoring.
Since this is a kernel level call to ```system_supports_address_auth()``` , I am open to suggestions on how to handle this better.
https://github.com/llvm/llvm-project/pull/138643
More information about the llvm-commits
mailing list