Skip to content

Commit

Permalink
target/arm: change default pauth algorithm to impdef
Browse files Browse the repository at this point in the history
Pointer authentication on aarch64 is pretty expensive (up to 50% of
execution time) when running a virtual machine with tcg and -cpu max
(which enables pauth=on).

The advice is always: use pauth-impdef=on.
Our documentation even mentions it "by default" in
docs/system/introduction.rst.

Thus, we change the default to use impdef by default. This does not
affect kvm or hvf acceleration, since pauth algorithm used is the one
from host cpu.

This change is retro compatible, in terms of cli, with previous
versions, as the semantic of using -cpu max,pauth-impdef=on, and -cpu
max,pauth-qarma3=on is preserved.
The new option introduced in previous patch and matching old default is
-cpu max,pauth-qarma5=on.

Signed-off-by: Pierrick Bouvier <[email protected]>
  • Loading branch information
pbo-linaro committed Dec 3, 2024
1 parent 8528c6e commit 6290542
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 8 deletions.
2 changes: 1 addition & 1 deletion docs/system/arm/cpu-features.rst
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ Below is the list of TCG VCPU features and their descriptions.
When ``pauth`` is enabled, select the architected QARMA5 algorithm.

Without ``pauth-impdef``, ``pauth-qarma3`` or ``pauth-qarma5`` enabled,
the architected QARMA5 algorithm is used. The architected QARMA5
the QEMU impdef algorithm is used. The architected QARMA5
and QARMA3 algorithms have good cryptographic properties, but can
be quite slow to emulate. The impdef algorithm used by QEMU is
non-cryptographic but significantly faster.
Expand Down
2 changes: 1 addition & 1 deletion docs/system/introduction.rst
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ would default to it anyway.

.. code::
-cpu max,pauth-impdef=on \
-cpu max \
-smp 4 \
-accel tcg \
Expand Down
12 changes: 6 additions & 6 deletions target/arm/cpu64.c
Original file line number Diff line number Diff line change
Expand Up @@ -529,15 +529,15 @@ void arm_cpu_pauth_finalize(ARMCPU *cpu, Error **errp)
return;
}

if (cpu->prop_pauth_impdef) {
isar1 = FIELD_DP64(isar1, ID_AA64ISAR1, API, features);
isar1 = FIELD_DP64(isar1, ID_AA64ISAR1, GPI, 1);
if (cpu->prop_pauth_qarma5) {
isar1 = FIELD_DP64(isar1, ID_AA64ISAR1, APA, features);
isar1 = FIELD_DP64(isar1, ID_AA64ISAR1, GPA, 1);
} else if (cpu->prop_pauth_qarma3) {
isar2 = FIELD_DP64(isar2, ID_AA64ISAR2, APA3, features);
isar2 = FIELD_DP64(isar2, ID_AA64ISAR2, GPA3, 1);
} else { /* default is pauth-qarma5 */
isar1 = FIELD_DP64(isar1, ID_AA64ISAR1, APA, features);
isar1 = FIELD_DP64(isar1, ID_AA64ISAR1, GPA, 1);
} else { /* default is pauth-impdef */
isar1 = FIELD_DP64(isar1, ID_AA64ISAR1, API, features);
isar1 = FIELD_DP64(isar1, ID_AA64ISAR1, GPI, 1);
}
} else if (cpu->prop_pauth_impdef ||
cpu->prop_pauth_qarma3 ||
Expand Down

0 comments on commit 6290542

Please sign in to comment.