Re: #VE support for VMI

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 2019-05-20 at 11:22 -0700, Sean Christopherson wrote:
> On Mon, May 20, 2019 at 06:48:09PM +0300, Mihai Donțu wrote:
> > Hi Paolo,
> > 
> > We are looking at adding #VE support to the VMI subsystem we are
> > working on. Its purpose is to suppress VMEXIT-s caused by the page
> > table walker when the guest page tables are write-protected. A very
> > small in-guest agent (protected by the hypervisor) will receive the EPT
> > violation events, handle PT-walk writes and turn the rest into VMCALL-
> > s.
> > 
> > A brief presentation of similar work on Xen can be found here:
> > https://www.slideshare.net/xen_com_mgr/xpdss17-hypervisorbased-security-bringing-virtualized-exceptions-into-the-game-mihai-dontu-bitdefender
> > 
> > There is a bit of an issue with using #VE on KVM, though: because the
> > EPT is built on-the-fly (as the guest runs), when we enable #VE in
> > VMCS, all EPT violations become virtualized, because all EPTE-s have
> > bit 63 zero (0: convert to #VE, 1: generate VMEXIT). At the moment, I
> > see two solutions:
> > 
> > (a) have the in-guest agent generate a VMCALL that KVM will interpret
> > as EPT-violation and call the default page fault handler;
> > (b) populate the EPT completely before entering the guest;
> > 
> > The first one requires adding dedicated code for KVM in the agent used
> > for handling #VE events, something we are trying to avoid. The second
> > one has implications we can't fully see, besides migration with which
> > we don't interact (VMI is designed to be disabled before migration
> > starts, implicitly #VE too).
> > 
> > I would appreciate any opinion / suggestion you have on a proper
> > approach to this issue.
> 
> (c) set suppress #VE for cleared EPT entries
> 
> The attached patches are compile tested only, are missing the actual
> #VE enabling, and are 64-bit only, but the underlying concept has been
> tested.  The code is from a PoC for unrelated #VE shenanigans, so
> there's a non-zero chance I missed something important when porting the
> code (the source branch is a bit messy).

I was secretly hoping for a (c). :-) Thank you very much for the
patches. We'll take them for a spin.

Regards,

-- 
Mihai Donțu





[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux