From: Sean Christopherson <seanjc@google.com>
To: Yosry Ahmed <yosry@kernel.org>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
Jim Mattson <jmattson@google.com>,
kvm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 2/9] KVM: SVM: Refactor SVM instruction handling on #GP intercept
Date: Fri, 3 Apr 2026 11:18:55 -0700 [thread overview]
Message-ID: <adAEjw56f_4cuUNR@google.com> (raw)
In-Reply-To: <20260316202732.3164936-3-yosry@kernel.org>
On Mon, Mar 16, 2026, Yosry Ahmed wrote:
> +/* Return 0 if not SVM instr, otherwise return associated exit_code */
> +static u64 svm_instr_exit_code(struct kvm_vcpu *vcpu)
To make it very clear what this is doing how about:
static u64 svm_get_decoded_instr_exit_code(struct kvm_vcpu *vcpu)
> {
> struct x86_emulate_ctxt *ctxt = vcpu->arch.emulate_ctxt;
>
> if (ctxt->b != 0x1 || ctxt->opcode_len != 2)
> - return NONE_SVM_INSTR;
> + return 0;
This should assert to ensure there's no collision with '0', i.e.
BUILD_BUG_ON(!SVM_EXIT_VMRUN || !SVM_EXIT_VMLOAD || !SVM_EXIT_VMSAVE);
> + if (!is_guest_mode(vcpu))
> + return kvm_emulate_instruction(vcpu,
> + EMULTYPE_VMWARE_GP | EMULTYPE_NO_DECODE);
Since you're moving this anyways:
if (!is_guest_mode(vcpu))
return kvm_emulate_instruction(vcpu, EMULTYPE_VMWARE_GP |
EMULTYPE_NO_DECODE);
Actually! Better idea, for this code and for the page_address_valid() checks:
invert the checks to reduce indentation, i.e. end up with:
/* FIXME: Handle SVM instructions through the emulator */
svm_exit_code = svm_get_decoded_instr_exit_code(vcpu);
if (svm_exit_code) {
if (!is_guest_mode(vcpu))
return svm_invoke_exit_handler(vcpu, svm_exit_code);
if (nested_svm_check_permissions(vcpu))
return 1;
if (!page_address_valid(vcpu, kvm_register_read(vcpu, VCPU_REGS_RAX)))
goto reinject;
/*
* FIXME: Only synthesize a #VMEXIT if L1 sets the intercept,
* but only after the VMLOAD/VMSAVE exit handlers can properly
* handle VMLOAD/VMSAVE from L2 with VLS enabled in L1 (i.e.
* RAX is an L2 GPA that needs translation through L1's NPT).
*/
nested_svm_simple_vmexit(svm, svm_exit_code);
return 1;
}
/*
* VMware backdoor emulation on #GP interception only handles
* IN{S}, OUT{S}, and RDPMC, and only for L1.
*/
if (!enable_vmware_backdoor || is_guest_mode(vcpu))
goto reinject;
return kvm_emulate_instruction(vcpu, EMULTYPE_VMWARE_GP | EMULTYPE_NO_DECODE);
> +
> reinject:
> kvm_queue_exception_e(vcpu, GP_VECTOR, error_code);
> return 1;
> --
> 2.53.0.851.ga537e3e6e9-goog
>
next prev parent reply other threads:[~2026-04-03 18:18 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-16 20:27 [PATCH v4 0/9] KVM: SVM: Fixes for VMCB12 checks and mapping Yosry Ahmed
2026-03-16 20:27 ` [PATCH v4 1/9] KVM: SVM: Properly check RAX in the emulator for SVM instructions Yosry Ahmed
2026-03-16 20:56 ` Yosry Ahmed
2026-03-16 20:27 ` [PATCH v4 2/9] KVM: SVM: Refactor SVM instruction handling on #GP intercept Yosry Ahmed
2026-04-03 18:18 ` Sean Christopherson [this message]
2026-04-03 21:45 ` Yosry Ahmed
2026-03-16 20:27 ` [PATCH v4 3/9] KVM: SVM: Properly check RAX on #GP intercept of SVM instructions Yosry Ahmed
2026-04-03 17:39 ` Sean Christopherson
2026-04-03 19:00 ` Sean Christopherson
2026-04-03 21:43 ` Yosry Ahmed
2026-04-03 22:16 ` Sean Christopherson
2026-03-16 20:27 ` [PATCH v4 4/9] KVM: SVM: Move RAX legality check to SVM insn interception handlers Yosry Ahmed
2026-03-16 20:27 ` [PATCH v4 5/9] KVM: SVM: Check EFER.SVME and CPL on #GP intercept of SVM instructions Yosry Ahmed
2026-03-16 20:27 ` [PATCH v4 6/9] KVM: SVM: Treat mapping failures equally in VMLOAD/VMSAVE emulation Yosry Ahmed
2026-03-16 20:27 ` [PATCH v4 7/9] KVM: nSVM: Fail emulation of VMRUN/VMLOAD/VMSAVE if mapping vmcb12 fails Yosry Ahmed
2026-03-16 20:27 ` [PATCH v4 8/9] KVM: selftests: Rework svm_nested_invalid_vmcb12_gpa Yosry Ahmed
2026-03-16 20:27 ` [PATCH v4 9/9] KVM: selftests: Drop 'invalid' from svm_nested_invalid_vmcb12_gpa's name Yosry Ahmed
2026-04-03 19:05 ` [PATCH v4 0/9] KVM: SVM: Fixes for VMCB12 checks and mapping Sean Christopherson
2026-04-03 21:45 ` Yosry Ahmed
2026-04-08 0:14 ` Sean Christopherson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=adAEjw56f_4cuUNR@google.com \
--to=seanjc@google.com \
--cc=jmattson@google.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=yosry@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.