diff mbox series

virtio-gpu: fix unmap in error path

Message ID 20190628072357.31782-1-kraxel@redhat.com (mailing list archive)
State New, archived
Headers show
Series virtio-gpu: fix unmap in error path | expand

Commit Message

Gerd Hoffmann June 28, 2019, 7:23 a.m. UTC
We land here in case not everything we've asked for could be mapped.
So unmap only the bytes which have actually been mapped.

Also we didn't access anything, so acces_len can be 0.

Reported-by: Laszlo Ersek <lersek@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 hw/display/virtio-gpu.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Laszlo Ersek June 28, 2019, 2:08 p.m. UTC | #1
On 06/28/19 09:23, Gerd Hoffmann wrote:
> We land here in case not everything we've asked for could be mapped.
> So unmap only the bytes which have actually been mapped.
> 
> Also we didn't access anything, so acces_len can be 0.

s/acces_len/access_len/

With that:

Reviewed-by: Laszlo Ersek <lersek@redhat.com>

Thank you!
Laszlo

> 
> Reported-by: Laszlo Ersek <lersek@redhat.com>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  hw/display/virtio-gpu.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c
> index 2b0f66b1d68d..475a018c027c 100644
> --- a/hw/display/virtio-gpu.c
> +++ b/hw/display/virtio-gpu.c
> @@ -1048,9 +1048,9 @@ static int virtio_gpu_load(QEMUFile *f, void *opaque, size_t size,
>                  if (res->iov[i].iov_base) {
>                      dma_memory_unmap(VIRTIO_DEVICE(g)->dma_as,
>                                       res->iov[i].iov_base,
> -                                     res->iov[i].iov_len,
> +                                     len,
>                                       DMA_DIRECTION_TO_DEVICE,
> -                                     res->iov[i].iov_len);
> +                                     0);
>                  }
>                  /* ...and the mappings for previous loop iterations */
>                  res->iov_cnt = i;
>
Li Qiang June 28, 2019, 3:31 p.m. UTC | #2
Gerd Hoffmann <kraxel@redhat.com> 于2019年6月28日周五 下午3:24写道:

> We land here in case not everything we've asked for could be mapped.
> So unmap only the bytes which have actually been mapped.
>
> Also we didn't access anything, so acces_len can be 0.
>
> Reported-by: Laszlo Ersek <lersek@redhat.com>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
>

It is reasonable, so

Reviewed-by: Li Qiang <liq3ea@gmail.com>

btw: Does it break something before this patch?
AFAICS, the 'len' is not used for the unmap, only the 'access_len' is used.

Thanks,
Li Qiang



> ---
>  hw/display/virtio-gpu.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c
> index 2b0f66b1d68d..475a018c027c 100644
> --- a/hw/display/virtio-gpu.c
> +++ b/hw/display/virtio-gpu.c
> @@ -1048,9 +1048,9 @@ static int virtio_gpu_load(QEMUFile *f, void
> *opaque, size_t size,
>                  if (res->iov[i].iov_base) {
>                      dma_memory_unmap(VIRTIO_DEVICE(g)->dma_as,
>                                       res->iov[i].iov_base,
> -                                     res->iov[i].iov_len,
> +                                     len,
>                                       DMA_DIRECTION_TO_DEVICE,
> -                                     res->iov[i].iov_len);
> +                                     0);
>                  }
>                  /* ...and the mappings for previous loop iterations */
>                  res->iov_cnt = i;
> --
> 2.18.1
>
>
>
diff mbox series

Patch

diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c
index 2b0f66b1d68d..475a018c027c 100644
--- a/hw/display/virtio-gpu.c
+++ b/hw/display/virtio-gpu.c
@@ -1048,9 +1048,9 @@  static int virtio_gpu_load(QEMUFile *f, void *opaque, size_t size,
                 if (res->iov[i].iov_base) {
                     dma_memory_unmap(VIRTIO_DEVICE(g)->dma_as,
                                      res->iov[i].iov_base,
-                                     res->iov[i].iov_len,
+                                     len,
                                      DMA_DIRECTION_TO_DEVICE,
-                                     res->iov[i].iov_len);
+                                     0);
                 }
                 /* ...and the mappings for previous loop iterations */
                 res->iov_cnt = i;