From 8d84b5776f427f1ba621a16138741e6bf15a7f66 Mon Sep 17 00:00:00 2001 From: Michael Scire Date: Wed, 11 Oct 2023 03:21:06 -0700 Subject: [PATCH] kern: add speculation barriers after eret --- .../include/mesosphere/arch/arm64/kern_assembly_macros.h | 5 +++++ .../source/arch/arm64/svc/kern_svc_exception_asm.s | 2 +- .../source/arch/arm64/svc/kern_svc_handlers_asm.s | 8 ++++---- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/libmesosphere/include/mesosphere/arch/arm64/kern_assembly_macros.h b/libmesosphere/include/mesosphere/arch/arm64/kern_assembly_macros.h index 97b50afb..8dfafdc7 100644 --- a/libmesosphere/include/mesosphere/arch/arm64/kern_assembly_macros.h +++ b/libmesosphere/include/mesosphere/arch/arm64/kern_assembly_macros.h @@ -94,3 +94,8 @@ label_done: ENABLE_FPU(xtmp1) \ GET_THREAD_CONTEXT_AND_RESTORE_FPCR_FPSR(ctx, xtmp1, xtmp2, wtmp1, wtmp2) \ RESTORE_FPU32_ALL_REGISTERS(ctx, xtmp1) + +#define ERET_WITH_SPECULATION_BARRIER \ + eret; \ + dsb nsh; \ + isb diff --git a/libmesosphere/source/arch/arm64/svc/kern_svc_exception_asm.s b/libmesosphere/source/arch/arm64/svc/kern_svc_exception_asm.s index 2194c594..c3ee6a07 100644 --- a/libmesosphere/source/arch/arm64/svc/kern_svc_exception_asm.s +++ b/libmesosphere/source/arch/arm64/svc/kern_svc_exception_asm.s @@ -130,4 +130,4 @@ _ZN3ams4kern3svc14RestoreContextEm: /* Return. */ add sp, sp, #(EXCEPTION_CONTEXT_SIZE) - eret + ERET_WITH_SPECULATION_BARRIER diff --git a/libmesosphere/source/arch/arm64/svc/kern_svc_handlers_asm.s b/libmesosphere/source/arch/arm64/svc/kern_svc_handlers_asm.s index d795c6aa..6e6f07a3 100644 --- a/libmesosphere/source/arch/arm64/svc/kern_svc_handlers_asm.s +++ b/libmesosphere/source/arch/arm64/svc/kern_svc_handlers_asm.s @@ -194,7 +194,7 @@ _ZN3ams4kern4arch5arm6412SvcHandler64Ev: /* Return. */ add sp, sp, #(EXCEPTION_CONTEXT_SIZE) - eret + ERET_WITH_SPECULATION_BARRIER 5: /* Return from SVC. */ @@ -297,7 +297,7 @@ _ZN3ams4kern4arch5arm6412SvcHandler64Ev: /* Return. */ add sp, sp, #(EXCEPTION_CONTEXT_SIZE) - eret + ERET_WITH_SPECULATION_BARRIER /* ams::kern::arch::arm64::SvcHandler32() */ .section .text._ZN3ams4kern4arch5arm6412SvcHandler32Ev, "ax", %progbits @@ -467,7 +467,7 @@ _ZN3ams4kern4arch5arm6412SvcHandler32Ev: /* Return. */ add sp, sp, #(EXCEPTION_CONTEXT_SIZE) - eret + ERET_WITH_SPECULATION_BARRIER 5: /* Return from SVC. */ @@ -547,4 +547,4 @@ _ZN3ams4kern4arch5arm6412SvcHandler32Ev: /* Return. */ add sp, sp, #(EXCEPTION_CONTEXT_SIZE) - eret + ERET_WITH_SPECULATION_BARRIER