Commit 7dffecaf authored by Maxim Levitsky's avatar Maxim Levitsky Committed by Paolo Bonzini
Browse files

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: default avatarMaxim Levitsky <mlevitsk@redhat.com>
Message-Id: <20201001112954.6258-3-mlevitsk@redhat.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 36385ccc
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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)
+6 −3
Original line number Diff line number Diff line
@@ -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;