If the len is 8 bytes, we can't get the correct sign extend for be system. Fix the mask type len and the comparison of length. Signed-off-by: Schspa Shi <schspa@xxxxxxxxx> --- arch/arm64/kvm/mmio.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/arm64/kvm/mmio.c b/arch/arm64/kvm/mmio.c index 3dd38a151d2a6..0692f8b18f35c 100644 --- a/arch/arm64/kvm/mmio.c +++ b/arch/arm64/kvm/mmio.c @@ -81,8 +81,8 @@ unsigned long kvm_mmio_read_buf(const void *buf, unsigned int len) int kvm_handle_mmio_return(struct kvm_vcpu *vcpu) { unsigned long data; + unsigned long mask; unsigned int len; - int mask; /* Detect an already handled MMIO return */ if (unlikely(!vcpu->mmio_needed)) @@ -97,7 +97,7 @@ int kvm_handle_mmio_return(struct kvm_vcpu *vcpu) data = kvm_mmio_read_buf(run->mmio.data, len); if (kvm_vcpu_dabt_issext(vcpu) && - len < sizeof(unsigned long)) { + len <= sizeof(unsigned long)) { mask = 1U << ((len * 8) - 1); data = (data ^ mask) - mask; } -- 2.37.0 _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm