mirror of https://github.com/xemu-project/xemu.git
vfio/container: Fix container object destruction
When commit96b7af4388
intoduced a .instance_finalize() handler, it did not take into account that the container was not necessarily inserted into the container list of the address space. Hence, if the container object is destroyed, by calling object_unref() for example, before vfio_address_space_insert() is called, QEMU may crash when removing the container from the list as done in vfio_container_instance_finalize(). This was seen with an SEV-SNP guest for which discarding of RAM fails. To resolve this issue, use the safe version of QLIST_REMOVE(). Cc: Zhenzhong Duan <zhenzhong.duan@intel.com> Cc: Eric Auger <eric.auger@redhat.com> Fixes:96b7af4388
("vfio/container: Move vfio_container_destroy() to an instance_finalize() handler") Reviewed-by: Zhenzhong Duan <zhenzhong.duan@intel.com> Signed-off-by: Cédric Le Goater <clg@redhat.com>
This commit is contained in:
parent
66650fd0cc
commit
ebbf7c60bb
|
@ -103,7 +103,7 @@ static void vfio_container_instance_finalize(Object *obj)
|
|||
VFIOContainerBase *bcontainer = VFIO_IOMMU(obj);
|
||||
VFIOGuestIOMMU *giommu, *tmp;
|
||||
|
||||
QLIST_REMOVE(bcontainer, next);
|
||||
QLIST_SAFE_REMOVE(bcontainer, next);
|
||||
|
||||
QLIST_FOREACH_SAFE(giommu, &bcontainer->giommu_list, giommu_next, tmp) {
|
||||
memory_region_unregister_iommu_notifier(
|
||||
|
|
Loading…
Reference in New Issue