From 25abb10b22a693c375e3437650455a54da7b035b Mon Sep 17 00:00:00 2001 From: Michalis Pappas Date: Wed, 7 Aug 2024 12:30:01 +0200 Subject: [PATCH] arch/arm64: Generate MTE keys with libukrandom Update MTE to generate keys using the uk_random API. Signed-off-by: Michalis Pappas Reviewed-by: Maria Pana Reviewed-by: Alex Apostolescu Reviewed-by: Simon Kuenzer Approved-by: Simon Kuenzer GitHub-Closes: #1496 --- arch/arm/arm64/Config.uk | 2 +- arch/arm/arm64/memtag.c | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/arch/arm/arm64/Config.uk b/arch/arm/arm64/Config.uk index 37c42b508..4008efea5 100644 --- a/arch/arm/arm64/Config.uk +++ b/arch/arm/arm64/Config.uk @@ -166,8 +166,8 @@ config ARM64_FEAT_PAUTH menuconfig ARM64_FEAT_MTE bool "Armv8.5 Memory Tagging Extensions" - select HAVE_ARM64_FEAT_RNG select HAVE_MEMTAG + select LIBUKRANDOM select PAGING help Protects against memory safety violations by restricting diff --git a/arch/arm/arm64/memtag.c b/arch/arm/arm64/memtag.c index 96e8fa505..34b3e74ee 100644 --- a/arch/arm/arm64/memtag.c +++ b/arch/arm/arm64/memtag.c @@ -33,7 +33,7 @@ #include #include #include -#include +#include void *ukarch_memtag_region(void *ptr, __sz size) { @@ -51,14 +51,14 @@ void *ukarch_memtag_region(void *ptr, __sz size) int ukarch_memtag_init(void) { + unsigned int mte_version; __u64 reg; __u64 seed; - unsigned int mte_version; + int rc; mte_version = (SYSREG_READ(ID_AA64PFR1_EL1) >> ID_AA64PFR1_EL1_MTE_SHIFT) & ID_AA64PFR1_EL1_MTE_MASK; - if (mte_version < ARM64_FEAT_MTE2) { uk_pr_err("FEAT_MTE2 is not implemented\n"); return -ENOTSUP; @@ -72,11 +72,11 @@ int ukarch_memtag_init(void) #endif /* Set seed for RGSR_EL1 */ - if (ukarch_random_init()) - UK_CRASH("Arch random not available\n"); - - if (ukarch_random_seed_u64(&seed)) - UK_CRASH("Could not generate MTE seed\n"); + rc = uk_random_fill_buffer(&seed, sizeof(seed)); + if (unlikely(rc)) { + uk_pr_err("Could not generate MTE key (%d)\n", rc); + return rc; + } #if CONFIG_ARM64_FEAT_MTE_TCF_ASYNC SYSREG_WRITE(SCTLR_EL1, (SYSREG_READ(SCTLR_EL1) | -- 2.39.5