Messages in this thread | | | Subject | Re: [PATCH] KVM: VMX: Enable Notify VM exit | From | Tao Xu <> | Date | Tue, 3 Nov 2020 14:08:59 +0800 |
| |
On 11/3/20 12:43 AM, Andy Lutomirski wrote: > On Sun, Nov 1, 2020 at 10:14 PM Tao Xu <tao3.xu@intel.com> wrote: >> >> There are some cases that malicious virtual machines can cause CPU stuck >> (event windows don't open up), e.g., infinite loop in microcode when >> nested #AC (CVE-2015-5307). No event window obviously means no events, >> e.g. NMIs, SMIs, and IRQs will all be blocked, may cause the related >> hardware CPU can't be used by host or other VM. >> >> To resolve those cases, it can enable a notify VM exit if no >> event window occur in VMX non-root mode for a specified amount of >> time (notify window). >> >> Expose a module param for setting notify window, default setting it to >> the time as 1/10 of periodic tick, and user can set it to 0 to disable >> this feature. >> >> TODO: >> 1. The appropriate value of notify window. >> 2. Another patch to disable interception of #DB and #AC when notify >> VM-Exiting is enabled. > > Whoa there. > > A VM control that says "hey, CPU, if you messed up and livelocked for > a long time, please break out of the loop" is not a substitute for > fixing the livelocks. So I don't think you get do disable > interception of #DB and #AC. I also think you should print a loud > warning and have some intelligent handling when this new exit > triggers. > >> +static int handle_notify(struct kvm_vcpu *vcpu) >> +{ >> + unsigned long exit_qualification = vmcs_readl(EXIT_QUALIFICATION); >> + >> + /* >> + * Notify VM exit happened while executing iret from NMI, >> + * "blocked by NMI" bit has to be set before next VM entry. >> + */ >> + if (exit_qualification & NOTIFY_VM_CONTEXT_VALID) { >> + if (enable_vnmi && >> + (exit_qualification & INTR_INFO_UNBLOCK_NMI)) >> + vmcs_set_bits(GUEST_INTERRUPTIBILITY_INFO, >> + GUEST_INTR_STATE_NMI); > > This needs actual documentation in the SDM or at least ISE please. > Notify VM-Exit is defined in ISE, chapter 9.2: https://software.intel.com/content/dam/develop/external/us/en/documents/architecture-instruction-set-extensions-programming-reference.pdf
I will add this information into commit message. Thank you for reminding me.
| |