KVM: nSVM: Check the value written to MSR_VM_HSAVE_PA
commit fce7e152ffc8f89d02a80617b16c7aa1527847c8 upstream. APM states that #GP is raised upon write to MSR_VM_HSAVE_PA when the supplied address is not page-aligned or is outside of "maximum supported physical address for this implementation". page_address_valid() check seems suitable. Also, forcefully page-align the address when it's written from VMM. Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> Message-Id: <20210628104425.391276-2-vkuznets@redhat.com> Cc: stable@vger.kernel.org Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com> [Add comment about behavior for host-provided values. - Paolo] Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
5b779e597c
commit
bedc5d0911
@@ -2745,7 +2745,16 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr)
|
|||||||
svm_disable_lbrv(vcpu);
|
svm_disable_lbrv(vcpu);
|
||||||
break;
|
break;
|
||||||
case MSR_VM_HSAVE_PA:
|
case MSR_VM_HSAVE_PA:
|
||||||
svm->nested.hsave_msr = data;
|
/*
|
||||||
|
* Old kernels did not validate the value written to
|
||||||
|
* MSR_VM_HSAVE_PA. Allow KVM_SET_MSR to set an invalid
|
||||||
|
* value to allow live migrating buggy or malicious guests
|
||||||
|
* originating from those kernels.
|
||||||
|
*/
|
||||||
|
if (!msr->host_initiated && !page_address_valid(vcpu, data))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
svm->nested.hsave_msr = data & PAGE_MASK;
|
||||||
break;
|
break;
|
||||||
case MSR_VM_CR:
|
case MSR_VM_CR:
|
||||||
return svm_set_vm_cr(vcpu, data);
|
return svm_set_vm_cr(vcpu, data);
|
||||||
|
Reference in New Issue
Block a user