]> xenbits.xensource.com Git - people/aperard/xen-unstable.git/commitdiff
xen/riscv: refactor decode_trap_cause()
authorOleksii Kurochko <oleksii.kurochko@gmail.com>
Tue, 6 Aug 2024 06:36:29 +0000 (08:36 +0200)
committerJan Beulich <jbeulich@suse.com>
Tue, 6 Aug 2024 06:36:29 +0000 (08:36 +0200)
Use array_access_nospec() to prevent guest speculation.

Avoid double access of trap_causes[cause].

Suggested-by: Jan Beulich <jbeulich@suse.com>
Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
xen/arch/riscv/traps.c

index cb18b30ff2539f6d97b5401bb38c2086500f56d7..7149504ebc34418fec0a111360dc3e46f91c18be 100644 (file)
@@ -6,6 +6,7 @@
  */
 
 #include <xen/lib.h>
+#include <xen/nospec.h>
 #include <xen/sched.h>
 
 #include <asm/processor.h>
@@ -47,9 +48,11 @@ static const char *decode_trap_cause(unsigned long cause)
         [CAUSE_STORE_GUEST_PAGE_FAULT] = "Guest Store/AMO Page Fault",
     };
 
-    if ( cause < ARRAY_SIZE(trap_causes) && trap_causes[cause] )
-        return trap_causes[cause];
-    return "UNKNOWN";
+    const char *res = cause < ARRAY_SIZE(trap_causes)
+                      ? array_access_nospec(trap_causes, cause)
+                      : NULL;
+
+    return res ?: "UNKNOWN";
 }
 
 static const char *decode_reserved_interrupt_cause(unsigned long irq_cause)