qemu/include/migration
David Hildenbrand 0fd7616e0f vfio: Support for RamDiscardManager in the vIOMMU case
vIOMMU support works already with RamDiscardManager as long as guests only
map populated memory. Both, populated and discarded memory is mapped
into &address_space_memory, where vfio_get_xlat_addr() will find that
memory, to create the vfio mapping.

Sane guests will never map discarded memory (e.g., unplugged memory
blocks in virtio-mem) into an IOMMU - or keep it mapped into an IOMMU while
memory is getting discarded. However, there are two cases where a malicious
guests could trigger pinning of more memory than intended.

One case is easy to handle: the guest trying to map discarded memory
into an IOMMU.

The other case is harder to handle: the guest keeping memory mapped in
the IOMMU while it is getting discarded. We would have to walk over all
mappings when discarding memory and identify if any mapping would be a
violation. Let's keep it simple for now and print a warning, indicating
that setting RLIMIT_MEMLOCK can mitigate such attacks.

We have to take care of incoming migration: at the point the
IOMMUs get restored and start creating mappings in vfio, RamDiscardManager
implementations might not be back up and running yet: let's add runstate
priorities to enforce the order when restoring.

Acked-by: Alex Williamson <alex.williamson@redhat.com>
Reviewed-by: Alex Williamson <alex.williamson@redhat.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Michael S. Tsirkin" <mst@redhat.com>
Cc: Alex Williamson <alex.williamson@redhat.com>
Cc: Dr. David Alan Gilbert <dgilbert@redhat.com>
Cc: Igor Mammedov <imammedo@redhat.com>
Cc: Pankaj Gupta <pankaj.gupta.linux@gmail.com>
Cc: Peter Xu <peterx@redhat.com>
Cc: Auger Eric <eric.auger@redhat.com>
Cc: Wei Yang <richard.weiyang@linux.alibaba.com>
Cc: teawater <teawaterz@linux.alibaba.com>
Cc: Marek Kedzierski <mkedzier@redhat.com>
Signed-off-by: David Hildenbrand <david@redhat.com>
Message-Id: <20210413095531.25603-10-david@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
2021-07-08 15:54:45 -04:00
..
blocker.h migration: Create migration/blocker.h 2017-05-17 12:04:59 +02:00
colo.h migration/colo: Use ram_block_discard_disable() 2020-07-02 05:54:59 -04:00
cpu.h Include migration/vmstate.h less 2019-08-16 13:31:52 +02:00
failover.h Include qemu-common.h exactly where needed 2019-06-12 13:20:20 +02:00
global_state.h Clean up inclusion of sysemu/sysemu.h 2019-08-16 13:31:53 +02:00
misc.h migrate/ram: remove "ram_bulk_stage" and "fpo_enabled" 2021-05-13 18:21:13 +01:00
qemu-file-types.h qemu-file: move qemu_{get,put}_counted_string() declarations 2019-08-14 17:33:14 +01:00
register.h migration: Change SaveStateEntry.instance_id into uint32_t 2020-01-20 09:10:23 +01:00
snapshot.h migration: introduce a delete_snapshot wrapper 2021-02-08 11:19:51 +00:00
vmstate.h vfio: Support for RamDiscardManager in the vIOMMU case 2021-07-08 15:54:45 -04:00