[PATCH] KVM: arm64: Fix reporting of endianess when the access originates at EL0

Andrew Jones drjones at redhat.com
Tue Oct 12 05:00:40 PDT 2021


On Tue, Oct 12, 2021 at 12:23:12PM +0100, Marc Zyngier wrote:
> We currently check SCTLR_EL1.EE when computing the address of
> a faulting guest access. However, the fault could have occured at
> EL0, in which case the right bit to check would be SCTLR_EL1.E0E.
> 
> This is pretty unlikely to cause any issue in practice: You'd have
> to have a guest with a LE EL1 and a BE EL0 (or the other way around),
> and have mapped a device into the EL0 page tables.

I wonder if that's something a usermode network driver might want?

> 
> Good luck with that!
> 
> Signed-off-by: Marc Zyngier <maz at kernel.org>
> ---
>  arch/arm64/include/asm/kvm_emulate.h | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm64/include/asm/kvm_emulate.h b/arch/arm64/include/asm/kvm_emulate.h
> index 1fadb5d98a36..14ee8319b1ce 100644
> --- a/arch/arm64/include/asm/kvm_emulate.h
> +++ b/arch/arm64/include/asm/kvm_emulate.h
> @@ -396,7 +396,10 @@ static inline bool kvm_vcpu_is_be(struct kvm_vcpu *vcpu)
>  	if (vcpu_mode_is_32bit(vcpu))
>  		return !!(*vcpu_cpsr(vcpu) & PSR_AA32_E_BIT);
>  
> -	return !!(vcpu_read_sys_reg(vcpu, SCTLR_EL1) & (1 << 25));
> +	if (vcpu_mode_priv(vcpu))
> +		return !!(vcpu_read_sys_reg(vcpu, SCTLR_EL1) & SCTLR_ELx_EE);
> +	else
> +		return !!(vcpu_read_sys_reg(vcpu, SCTLR_EL1) & SCTLR_EL1_E0E);
>  }
>  
>  static inline unsigned long vcpu_data_guest_to_host(struct kvm_vcpu *vcpu,
> -- 
> 2.30.2
>

Reviewed-by: Andrew Jones <drjones at redhat.com>




More information about the linux-arm-kernel mailing list