]> xenbits.xensource.com Git - unikraft/unikraft.git/commitdiff
arch/arm64: Generate MTE keys with libukrandom
authorMichalis Pappas <michalis@unikraft.io>
Wed, 7 Aug 2024 10:30:01 +0000 (12:30 +0200)
committerUnikraft Bot <monkey@unikraft.io>
Wed, 4 Dec 2024 15:24:38 +0000 (15:24 +0000)
Update MTE to generate keys using the uk_random API.

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Maria Pana <maria.pana4@gmail.com>
Reviewed-by: Alex Apostolescu <alexx.apostolescu@gmail.com>
Reviewed-by: Simon Kuenzer <simon@unikraft.io>
Approved-by: Simon Kuenzer <simon@unikraft.io>
GitHub-Closes: #1496

arch/arm/arm64/Config.uk
arch/arm/arm64/memtag.c

index 37c42b508130d40f3357506f7ac142a1164dc1a6..4008efea552cad3768624496b136bd7f37c220cf 100644 (file)
@@ -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
index 96e8fa505eb08f82a14ae27fe491105e1421dd9f..34b3e74eec4d4a0c3b3c10bd28aaceb9fadcca72 100644 (file)
@@ -33,7 +33,7 @@
 #include <stddef.h>
 #include <uk/arch/memtag.h>
 #include <uk/arch/lcpu.h>
-#include <uk/arch/random.h>
+#include <uk/random.h>
 
 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) |