aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShuai Xue <xueshuai@linux.alibaba.com>2022-08-20 19:23:09 +0800
committerShuai Xue <xueshuai@linux.alibaba.com>2022-08-25 10:46:30 +0800
commit051c9b4379e3ec45b9f5b52fe73a0acd9343ef42 (patch)
treece60b45675ecd5744d5af4e15df3443b5dbc3d2f
parentadbf8b3f6959f0eefbf89c3cb6775c4782d58140 (diff)
downloadras-tools-051c9b4379e3ec45b9f5b52fe73a0acd9343ef42.tar.gz
einj_mem_uc: add a case to trigger LLC UCE on arm64
Signed-off-by: Shuai Xue <xueshuai@linux.alibaba.com>
-rw-r--r--einj_mem_uc.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/einj_mem_uc.c b/einj_mem_uc.c
index e1b3e83..7288eb5 100644
--- a/einj_mem_uc.c
+++ b/einj_mem_uc.c
@@ -145,7 +145,15 @@ static void inject_llc(unsigned long long addr, void *vaddr, int notrigger)
wfile(EINJ_DOIT, 1);
}
#elif __aarch64__
-static void inject_llc(unsigned long long addr, void *vaddr, int notrigger) {}
+static void inject_llc(unsigned long long addr, void *vaddr, int notrigger)
+{
+ PRINT_INJECTING;
+ wfile(EINJ_ETYPE, 0x400);
+ wfile(EINJ_MASK, 0x01);
+ wfile(EINJ_FLAGS, 0x01);
+ wfile(EINJ_NOTRIGGER, notrigger);
+ wfile(EINJ_DOIT, 1);
+}
#endif
static int is_privileged(void)
@@ -529,7 +537,10 @@ int trigger_llc(char *addr)
asm volatile("clflush %0" : "+m" (*addr));
}
#elif __aarch64__
-int trigger_llc(char *addr) {}
+int trigger_llc(char *addr)
+{
+ asm volatile("dc civac, %0" : : "r" (addr) : "memory");
+}
#endif
int trigger_instr(char *addr)