KVM: x86: Sanity check inputs to kvm_handle_memory_failure()

Message ID 20221220153427.514032-1-seanjc@google.com
State New
Headers
Series KVM: x86: Sanity check inputs to kvm_handle_memory_failure() |

Commit Message

Sean Christopherson Dec. 20, 2022, 3:34 p.m. UTC
  Add a sanity check in kvm_handle_memory_failure() to assert that a valid
x86_exception structure is provided if the memory "failure" wants to
propagate a fault into the guest.  If a memory failure happens during a
direct guest physical memory access, e.g. for nested VMX, KVM hardcodes
the failure to X86EMUL_IO_NEEDED and doesn't provide an exception pointer
(because the exception struct would just be filled with garbage).

Signed-off-by: Sean Christopherson <seanjc@google.com>
---
 arch/x86/kvm/x86.c | 3 +++
 1 file changed, 3 insertions(+)


base-commit: 9d75a3251adfbcf444681474511b58042a364863
  

Comments

Paolo Bonzini Dec. 23, 2022, 5:15 p.m. UTC | #1
Queued, thanks.

Paolo
  

Patch

diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 312aea1854ae..da4bbd043a7b 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -13132,6 +13132,9 @@  int kvm_handle_memory_failure(struct kvm_vcpu *vcpu, int r,
 			      struct x86_exception *e)
 {
 	if (r == X86EMUL_PROPAGATE_FAULT) {
+		if (KVM_BUG_ON(!e, vcpu->kvm))
+			return -EIO;
+
 		kvm_inject_emulated_page_fault(vcpu, e);
 		return 1;
 	}