From cb0698ab47731038291726e9a1d62723592c9c13 Mon Sep 17 00:00:00 2001 From: Nathan Chancellor Date: Thu, 28 Apr 2022 12:43:51 -0700 Subject: [PATCH] boot-qemu.sh: Use implementation defined pointer authentication algorithm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit By default, QEMU's TCG uses the architected QARMA algorithm for pointer authentication, which is better cryptographically but extremely slow to emulate. As of QEMU 6.0.0, there is an "Implementation Defined" algorithm available, which is not cryptographic but significantly faster to run. ARCH=arm64 defconfig: Benchmark 1: QARMA Time (mean ± σ): 10.381 s ± 0.048 s [User: 8.469 s, System: 0.142 s] Range (min … max): 10.317 s … 10.478 s 50 runs Benchmark 2: Implementation Defined Time (mean ± σ): 7.051 s ± 0.015 s [User: 5.125 s, System: 0.130 s] Range (min … max): 7.014 s … 7.083 s 50 runs Summary 'Implementation Defined' ran 1.47 ± 0.01 times faster than 'QARMA' ARCH=arm64 defconfig + KASAN_SW_TAGS + the KUnit tests: Benchmark 1: QARMA Time (mean ± σ): 185.997 s ± 2.778 s [User: 184.043 s, System: 0.593 s] Range (min … max): 182.816 s … 190.463 s 10 runs Benchmark 2: Implementation Defined Time (mean ± σ): 29.618 s ± 0.301 s [User: 26.951 s, System: 0.500 s] Range (min … max): 29.185 s … 30.103 s 10 runs Summary 'Implementation Defined' ran 6.28 ± 0.11 times faster than 'QARMA' This should help avoid weird timeouts in CI, as the VMs can be quite slow. Aside from the benchmarks above, this change is visible in dmesg: [ 0.000000] CPU features: detected: Address authentication (architected QARMA5 algorithm) vs. [ 0.000000] CPU features: detected: Address authentication (IMP DEF algorithm) Link: https://lore.kernel.org/YlgVa+AP0g4IYvzN@lakrids/ Link: https://gitlab.com/qemu-project/qemu/-/blob/v7.0.0/docs/system/arm/cpu-features.rst Signed-off-by: Nathan Chancellor --- boot-qemu.sh | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/boot-qemu.sh b/boot-qemu.sh index e199245..858fe36 100755 --- a/boot-qemu.sh +++ b/boot-qemu.sh @@ -232,17 +232,23 @@ function setup_qemu_args() { KIMAGE=Image.gz QEMU=(qemu-system-aarch64) get_full_kernel_path - if [[ $(get_qemu_ver_code) -ge 602050 ]]; then + QEMU_VER_CODE=$(get_qemu_ver_code) + if [[ ${QEMU_VER_CODE} -ge 602050 ]]; then LNX_VER_CODE=$(get_lnx_ver_code gzip -c -d "${KERNEL}") # https://gitlab.com/qemu-project/qemu/-/issues/964 if [[ ${LNX_VER_CODE} -lt 416000 ]]; then CPU=cortex-a72 - # https://gitlab.com/qemu-project/qemu/-/commit/69b2265d5fe8e0f401d75e175e0a243a7d505e53 + # lpa2=off: https://gitlab.com/qemu-project/qemu/-/commit/69b2265d5fe8e0f401d75e175e0a243a7d505e53 + # pauth-impdef=true: https://lore.kernel.org/YlgVa+AP0g4IYvzN@lakrids/ elif [[ ${LNX_VER_CODE} -lt 512000 ]]; then - CPU=max,lpa2=off + CPU=max,lpa2=off,pauth-impdef=true fi fi - [[ -z ${CPU} ]] && CPU=max + if [[ -z ${CPU} ]]; then + CPU=max + # https://lore.kernel.org/YlgVa+AP0g4IYvzN@lakrids/ + [[ ${QEMU_VER_CODE} -ge 600000 ]] && CPU=${CPU},pauth-impdef=true + fi APPEND_STRING+="console=ttyAMA0 earlycon " QEMU_ARCH_ARGS=( -cpu "${CPU}"