KVM: x86: Fix KVM_GET_MSR_INDEX_LIST
PATCH 1/1 KVM: x86: Fix KVM_GET_MSR_INDEX_LIST
So far, KVM copied the emulated_msrs (only MSR_IA32_MISC_ENABLE) to a wrong address in user space due to broken pointer arithmetic. This caused subtle corruption up there (missing MSR_IA32_MISC_ENABLE had probably no practical relevance). Moreover, the size check for the user-provided kvm_msr_list forgot about emulated MSRs.
Signed-off-by Jan Kiszka <[email protected]>
---
arch/x86/kvm/x86.c | 5 ++--- 1 files changed, 2 insertions(+), 3 deletions(-)
arch/x86/kvm/x86.c +2 -3
@@ -1252,14 +1252,13 @@ long kvm_arch_dev_ioctl(struct file *filp,if (copy_to_user (user_msr_list, &msr_list,sizeof msr_list)) goto out; r = -E2BIG ; -if (n < num_msrs_to_save) +if (n < msr_list.nmsrs) goto out; r = -EFAULT ;if (copy_to_user (user_msr_list->indices, &msrs_to_save, num_msrs_to_save *sizeof (u32))) goto out; -if (copy_to_user (user_msr_list->indices - + num_msrs_to_save *sizeof (u32), +if (copy_to_user (user_msr_list->indices + num_msrs_to_save, &emulated_msrs,ARRAY_SIZE (emulated_msrs) *sizeof (u32))) goto out;
Avi Kivity
AppliedQuoted 6 lines · Jan Kiszka
So far, KVM copied the
emulated_msrs(onlyMSR_IA32_MISC_ENABLE) to a wrong address in user space due to broken pointer arithmetic. This caused subtle corruption up there (missingMSR_IA32_MISC_ENABLEhad probably no practical relevance). Moreover, the size check for the user-providedkvm_msr_listforgot about emulated MSRs.
Applied, thanks. And ouch.
Signature · 1 line
error compiling committee.c: too many arguments to function