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
#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)
{
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;
#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) |