]> Pileus Git - ~andy/linux/commitdiff
ARM: KVM: Fix length of mmio access
authorMarc Zyngier <marc.zyngier@arm.com>
Tue, 5 Mar 2013 02:43:23 +0000 (02:43 +0000)
committerChristoffer Dall <cdall@cs.columbia.edu>
Thu, 7 Mar 2013 00:01:51 +0000 (16:01 -0800)
Instead of hardcoding the maximum MMIO access to be 4 bytes,
compare it to sizeof(unsigned long), which will do the
right thing on both 32 and 64bit systems.

Same thing for sign extention.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <cdall@cs.columbia.edu>
arch/arm/kvm/mmio.c

index 02ca76555bd4bc065bcc7fb47c36431c82c9cb84..72a12f2171b26bba2937e3c288f4bd51f1b5540b 100644 (file)
@@ -39,10 +39,10 @@ int kvm_handle_mmio_return(struct kvm_vcpu *vcpu, struct kvm_run *run)
 
        if (!run->mmio.is_write) {
                dest = vcpu_reg(vcpu, vcpu->arch.mmio_decode.rt);
-               memset(dest, 0, sizeof(int));
+               *dest = 0;
 
                len = run->mmio.len;
-               if (len > 4)
+               if (len > sizeof(unsigned long))
                        return -EINVAL;
 
                memcpy(dest, run->mmio.data, len);
@@ -50,7 +50,8 @@ int kvm_handle_mmio_return(struct kvm_vcpu *vcpu, struct kvm_run *run)
                trace_kvm_mmio(KVM_TRACE_MMIO_READ, len, run->mmio.phys_addr,
                                *((u64 *)run->mmio.data));
 
-               if (vcpu->arch.mmio_decode.sign_extend && len < 4) {
+               if (vcpu->arch.mmio_decode.sign_extend &&
+                   len < sizeof(unsigned long)) {
                        mask = 1U << ((len * 8) - 1);
                        *dest = (*dest ^ mask) - mask;
                }