Skip to content

Commit 0178fd7

Browse files
mstsirkinbonzini
authored andcommitted
mips/kvm: fix ioctl error handling
Returning directly whatever copy_to_user(...) or copy_from_user(...) returns may not do the right thing if there's a pagefault: copy_to_user/copy_from_user return the number of bytes not copied in this case, but ioctls need to return -EFAULT instead. Fix up kvm on mips to do return copy_to_user(...)) ? -EFAULT : 0; and return copy_from_user(...)) ? -EFAULT : 0; everywhere. Cc: stable@vger.kernel.org Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
1 parent 2b097e9 commit 0178fd7

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

arch/mips/kvm/mips.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -702,7 +702,7 @@ static int kvm_mips_get_reg(struct kvm_vcpu *vcpu,
702702
} else if ((reg->id & KVM_REG_SIZE_MASK) == KVM_REG_SIZE_U128) {
703703
void __user *uaddr = (void __user *)(long)reg->addr;
704704

705-
return copy_to_user(uaddr, vs, 16);
705+
return copy_to_user(uaddr, vs, 16) ? -EFAULT : 0;
706706
} else {
707707
return -EINVAL;
708708
}
@@ -732,7 +732,7 @@ static int kvm_mips_set_reg(struct kvm_vcpu *vcpu,
732732
} else if ((reg->id & KVM_REG_SIZE_MASK) == KVM_REG_SIZE_U128) {
733733
void __user *uaddr = (void __user *)(long)reg->addr;
734734

735-
return copy_from_user(vs, uaddr, 16);
735+
return copy_from_user(vs, uaddr, 16) ? -EFAULT : 0;
736736
} else {
737737
return -EINVAL;
738738
}

0 commit comments

Comments
 (0)