On Mon, Sep 19, 2022, Oliver Upton wrote: > On Thu, Sep 08, 2022 at 11:31:33PM +0000, Sean Christopherson wrote: > > @@ -75,12 +76,28 @@ static void guest_main(void) > > } > > > > /* > > - * The hypercall didn't #UD (guest_ud_handler() signals "done" if a #UD > > - * occurs). Verify that a #UD is NOT expected and that KVM patched in > > - * the native hypercall. > > + * If the quirk is disabled, verify that guest_ud_handler() "returned" > > + * -EFAULT and that KVM did NOT patch the hypercall. If the quirk is > > + * enabled, verify that the hypercall succeeded and that KVM patched in > > + * the "right" hypercall. > > */ > > - GUEST_ASSERT(!ud_expected); > > - GUEST_ASSERT(!memcmp(native_hypercall_insn, hypercall_insn, HYPERCALL_INSN_SIZE)); > > + if (ud_expected) { > > + GUEST_ASSERT(ret == (uint64_t)-EFAULT); > > + > > + /* > > + * Divergence should occur only on the last byte, as the VMCALL > > + * (0F 01 C1) and VMMCALL (0F 01 D9) share the first two bytes. > > + */ > > + GUEST_ASSERT(!memcmp(native_hypercall_insn, hypercall_insn, > > + HYPERCALL_INSN_SIZE - 1)); > > + GUEST_ASSERT(memcmp(native_hypercall_insn, hypercall_insn, > > + HYPERCALL_INSN_SIZE)); > > Should we just keep the assertions consistent for both cases (patched > and unpatched)? Not sure I follow what you're suggesting. By "consistent" do you mean doing something like snapshotting hypercall_insn and verifying that it's not changed?