On Mon, May 25, 2020 at 04:47:18PM +0300, Liran Alon wrote:Yes, I understood that. I meant explicit host kernel access.
On 22/05/2020 15:51, Kirill A. Shutemov wrote:Let me clarify: the guest memory mapped into host userspace is not
== Background / Problem ==Just to clarify: This is any host kernel memory info-leak vulnerability. Not
There are a number of hardware features (MKTME, SEV) which protect guest
memory from some unauthorized host access. The patchset proposes a purely
software feature that mitigates some of the same host-side read-only
attacks.
== What does this set mitigate? ==
- Host kernel âaccidentalâ access to guest data (think speculation)
just speculative execution memory info-leaks. Also architectural ones.
In addition, note that removing guest data from host kernel VA space also
makes guest<->host memory exploits more difficult.
E.g. Guest cannot use already available memory buffer in kernel VA space for
ROP or placing valuable guest-controlled code/data in general.
- Host kernel induced access to guest data (write(fd, &guest_data_ptr, len))I don't quite understand what is the benefit of preventing userspace VMM
- Host userspace access to guest data (compromised qemu)
access to guest data while the host kernel can still access it.
accessible by both host kernel and userspace. Host still has way to access
it via a new interface: GUP(FOLL_KVM). The GUP will give you struct page
that kernel has to map (temporarily) if need to access the data. So only
blessed codepaths would know how to deal with the memory.
It can help preventing some host->guest attack on the compromised host.
Like if an VM has successfully attacked the host it cannot attack other
VMs as easy.
Because guest have explicit interface to request which guest pages can be mapped in userspace VMM, the value of this is very small.
It would also help to protect against guest->host attack by removing one
more places where the guest's data is mapped on the host.
This is a scenario where an unpriviledged guest userspace have direct access to a virtual deviceQEMU is more easily compromised than the host kernel because it'sConsider the case when unprivileged guest user exploits bug in a QEMU
guest<->host attack surface is larger (E.g. Various device emulation).
But this compromise comes from the guest itself. Not other guests. In
contrast to host kernel attack surface, which an info-leak there can
be exploited from one guest to leak another guest data.
device emulation to gain access to data it cannot normally have access
within the guest. With the feature it would able to see only other shared
regions of guest memory such as DMA and IO buffers, but not the rest.