diff --git a/ArmPkg/Library/ArmSvcLib/AArch64/ArmSvc.S b/ArmPkg/Library/ArmSvcLib/AArch64/ArmSvc.S index 7c94db3451..ee265f94b9 100644 --- a/ArmPkg/Library/ArmSvcLib/AArch64/ArmSvc.S +++ b/ArmPkg/Library/ArmSvcLib/AArch64/ArmSvc.S @@ -1,5 +1,5 @@ // -// Copyright (c) 2012 - 2017, ARM Limited. All rights reserved. +// Copyright (c) 2012 - 2020, ARM Limited. All rights reserved. // // SPDX-License-Identifier: BSD-2-Clause-Patent // @@ -25,6 +25,9 @@ ASM_PFX(ArmCallSvc): ldp x0, x1, [x0, #0] svc #0 + // Prevent speculative execution beyond svc instruction + dsb nsh + isb // Pop the ARM_SVC_ARGS structure address from the stack into x9 ldr x9, [sp, #16] diff --git a/ArmPkg/Library/ArmSvcLib/Arm/ArmSvc.S b/ArmPkg/Library/ArmSvcLib/Arm/ArmSvc.S index fc2886b6b5..e81eb88f2e 100644 --- a/ArmPkg/Library/ArmSvcLib/Arm/ArmSvc.S +++ b/ArmPkg/Library/ArmSvcLib/Arm/ArmSvc.S @@ -1,5 +1,5 @@ // -// Copyright (c) 2016 - 2017, ARM Limited. All rights reserved. +// Copyright (c) 2016 - 2020, ARM Limited. All rights reserved. // // SPDX-License-Identifier: BSD-2-Clause-Patent // @@ -18,6 +18,9 @@ ASM_PFX(ArmCallSvc): ldm r0, {r0-r7} svc #0 + // Prevent speculative execution beyond svc instruction + dsb nsh + isb // Load the ARM_SVC_ARGS structure address from the stack into r8 ldr r8, [sp] diff --git a/ArmPkg/Library/ArmSvcLib/Arm/ArmSvc.asm b/ArmPkg/Library/ArmSvcLib/Arm/ArmSvc.asm index 82d10c023a..d1751488b2 100644 --- a/ArmPkg/Library/ArmSvcLib/Arm/ArmSvc.asm +++ b/ArmPkg/Library/ArmSvcLib/Arm/ArmSvc.asm @@ -1,5 +1,5 @@ // -// Copyright (c) 2016 - 2017, ARM Limited. All rights reserved. +// Copyright (c) 2016 - 2020, ARM Limited. All rights reserved. // // SPDX-License-Identifier: BSD-2-Clause-Patent // @@ -16,6 +16,9 @@ ldm r0, {r0-r7} svc #0 + // Prevent speculative execution beyond svc instruction + dsb nsh + isb // Load the ARM_SVC_ARGS structure address from the stack into r8 ldr r8, [sp]