forked from Minki/linux
KVM: x86: report negative values from wrmsr emulation to userspace
This will allow the KVM to report such errors (e.g -ENOMEM) to the userspace. Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com> Message-Id: <20201001112954.6258-3-mlevitsk@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
36385ccc9b
commit
7dffecaf4e
@ -3712,10 +3712,10 @@ static int em_wrmsr(struct x86_emulate_ctxt *ctxt)
|
||||
if (r == X86EMUL_IO_NEEDED)
|
||||
return r;
|
||||
|
||||
if (r)
|
||||
if (r > 0)
|
||||
return emulate_gp(ctxt, 0);
|
||||
|
||||
return X86EMUL_CONTINUE;
|
||||
return r < 0 ? X86EMUL_UNHANDLEABLE : X86EMUL_CONTINUE;
|
||||
}
|
||||
|
||||
static int em_rdmsr(struct x86_emulate_ctxt *ctxt)
|
||||
|
@ -1737,13 +1737,16 @@ int kvm_emulate_wrmsr(struct kvm_vcpu *vcpu)
|
||||
r = kvm_set_msr(vcpu, ecx, data);
|
||||
|
||||
/* MSR write failed? See if we should ask user space */
|
||||
if (r && kvm_set_msr_user_space(vcpu, ecx, data, r)) {
|
||||
if (r && kvm_set_msr_user_space(vcpu, ecx, data, r))
|
||||
/* Bounce to user space */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Signal all other negative errors to userspace */
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
/* MSR write failed? Inject a #GP */
|
||||
if (r) {
|
||||
if (r > 0) {
|
||||
trace_kvm_msr_write_ex(ecx, data);
|
||||
kvm_inject_gp(vcpu, 0);
|
||||
return 1;
|
||||
|
Loading…
Reference in New Issue
Block a user