[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 5/7] xen/arm: vsmc: Implement SMCCC_ARCH_WORKAROUND_1 BP hardening support
Hi, On 6 February 2018 at 20:12, Julien Grall <julien.grall@xxxxxxx> wrote: > On 02/06/2018 04:23 PM, Volodymyr Babchuk wrote: >> >> Hi, > > > Hi, > >> On 5 February 2018 at 15:20, Julien Grall <julien.grall@xxxxxxx> wrote: >>> >>> SMCCC 1.1 offers firmware-based CPU workarounds. In particular, >>> SMCCC_ARCH_WORKAROUND_1 provides BP hardening for variant 2 of XSA-254 >>> (CVE-2017-5715). >>> >>> If the hypervisor has some mitigation for this issue, report that we >>> deal with it using SMCCC_ARCH_WORKAROUND_1, as we apply the hypervisor >>> workaround on every guest exit. >> >> Just to be sure: is there some way to disable this workaround? > > > In which context? If the platform does not have any processor affected by > variant 2, then the workaround will not be enabled. Yes, right. I missed CPU caps check below. > In case of Linux, this workaround will only be called on affected > processors. > > >> >> >>> >>> Signed-off-by: Julien Grall <julien.grall@xxxxxxx> Reviewed-by: Volodymyr Babchuk <volodymyr_babchuk@xxxxxxxx> >>> --- >>> xen/arch/arm/vsmc.c | 22 ++++++++++++++++++++-- >>> xen/include/asm-arm/smccc.h | 6 ++++++ >>> 2 files changed, 26 insertions(+), 2 deletions(-) >>> >>> diff --git a/xen/arch/arm/vsmc.c b/xen/arch/arm/vsmc.c >>> index a708aa5e81..144a1cd761 100644 >>> --- a/xen/arch/arm/vsmc.c >>> +++ b/xen/arch/arm/vsmc.c >>> @@ -18,6 +18,7 @@ >>> #include <xen/lib.h> >>> #include <xen/types.h> >>> #include <public/arch-arm/smccc.h> >>> +#include <asm/cpufeature.h> >>> #include <asm/monitor.h> >>> #include <asm/regs.h> >>> #include <asm/smccc.h> >>> @@ -93,8 +94,25 @@ static bool handle_arch(struct cpu_user_regs *regs) >>> return true; >>> >>> case ARM_SMCCC_ARCH_FEATURES_FID: >>> - /* Nothing supported yet */ >>> - set_user_reg(regs, 0, -1); >>> + { >>> + uint32_t arch_func_id = get_user_reg(regs, 1); >>> + int ret = -1; >> >> I think that register_t will suit better in this case. > > > Well no. The return in the spec is int32 and will fit in w0. register_t is > either 32-bit or 64-bit. So int is the right type here. Ah, yes, you are right. > >> >>> + >>> + switch ( arch_func_id ) >>> + { >>> + case ARM_SMCCC_ARCH_WORKAROUND_1_FID: >>> + if ( cpus_have_cap(ARM_HARDEN_BRANCH_PREDICTOR) ) >>> + ret = 0; >>> + break; >>> + } >>> + >>> + set_user_reg(regs, 0, ret); >>> + >>> + return true; >>> + } >>> + >>> + case ARM_SMCCC_ARCH_WORKAROUND_1_FID: >>> + /* No return value */ >>> return true; >>> } >>> >>> diff --git a/xen/include/asm-arm/smccc.h b/xen/include/asm-arm/smccc.h >>> index 431389c118..b790fac17c 100644 >>> --- a/xen/include/asm-arm/smccc.h >>> +++ b/xen/include/asm-arm/smccc.h >>> @@ -115,6 +115,12 @@ static inline uint32_t smccc_get_owner(register_t >>> funcid) >>> ARM_SMCCC_OWNER_ARCH, \ >>> 0x1) >>> >>> +#define ARM_SMCCC_ARCH_WORKAROUND_1_FID \ >>> + ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL, \ >>> + ARM_SMCCC_CONV_32, \ >>> + ARM_SMCCC_OWNER_ARCH, \ >>> + 0x8000) >>> + >>> /* Only one error code defined in SMCCC */ >>> #define ARM_SMCCC_ERR_UNKNOWN_FUNCTION (-1) >>> >>> -- >>> 2.11.0 >>> >>> >>> _______________________________________________ >>> Xen-devel mailing list >>> Xen-devel@xxxxxxxxxxxxxxxxxxxx >>> https://lists.xenproject.org/mailman/listinfo/xen-devel > > > Cheers, > > -- > Julien Grall -- WBR Volodymyr Babchuk aka lorc [+380976646013] mailto: vlad.babchuk@xxxxxxxxx _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |