[PATCH v2 1/2] vdpa: Skip the maps not in the iova tree

Eugenio Pérez posted 2 patches 3 years, 6 months ago
Maintainers: "Michael S. Tsirkin" <mst@redhat.com>
[PATCH v2 1/2] vdpa: Skip the maps not in the iova tree
Posted by Eugenio Pérez 3 years, 6 months ago
Next patch will skip the registering of dma maps that the vdpa device
rejects in the iova tree. We need to consider that here or we cause a
SIGSEGV accessing result.

Reported-by: Lei Yang <leiyang@redhat.com>
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
---
 hw/virtio/vhost-vdpa.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c
index 3ff9ce3501..983d3697b0 100644
--- a/hw/virtio/vhost-vdpa.c
+++ b/hw/virtio/vhost-vdpa.c
@@ -289,6 +289,10 @@ static void vhost_vdpa_listener_region_del(MemoryListener *listener,
         };
 
         result = vhost_iova_tree_find_iova(v->iova_tree, &mem_region);
+        if (!result) {
+            /* The memory listener map wasn't mapped */
+            return;
+        }
         iova = result->iova;
         vhost_iova_tree_remove(v->iova_tree, result);
     }
-- 
2.31.1


Re: [PATCH v2 1/2] vdpa: Skip the maps not in the iova tree
Posted by Jason Wang 3 years, 6 months ago
在 2022/8/4 23:54, Eugenio Pérez 写道:
> Next patch will skip the registering of dma maps that the vdpa device
> rejects in the iova tree. We need to consider that here or we cause a
> SIGSEGV accessing result.
>
> Reported-by: Lei Yang <leiyang@redhat.com>
> Signed-off-by: Eugenio Pérez <eperezma@redhat.com>


Acked-by: Jason Wang <jasowang@redhat.com>


> ---
>   hw/virtio/vhost-vdpa.c | 4 ++++
>   1 file changed, 4 insertions(+)
>
> diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c
> index 3ff9ce3501..983d3697b0 100644
> --- a/hw/virtio/vhost-vdpa.c
> +++ b/hw/virtio/vhost-vdpa.c
> @@ -289,6 +289,10 @@ static void vhost_vdpa_listener_region_del(MemoryListener *listener,
>           };
>   
>           result = vhost_iova_tree_find_iova(v->iova_tree, &mem_region);
> +        if (!result) {
> +            /* The memory listener map wasn't mapped */
> +            return;
> +        }
>           iova = result->iova;
>           vhost_iova_tree_remove(v->iova_tree, result);
>       }