qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] virtio-iommu: Fix the partial copy of probe request


From: Michael S. Tsirkin
Subject: Re: [PATCH] virtio-iommu: Fix the partial copy of probe request
Date: Fri, 17 Jun 2022 01:31:06 -0400

On Fri, Jun 17, 2022 at 11:43:48AM +0800, Zhenzhong Duan wrote:
> The structure of probe request doesn't include the tail, this lead to
> a few field is missed to be copied. Currently this isn't an issue as
> those missed field belong to reserved field, just in case reserved
> field will be used in the future.
> 
> By this chance, also remove a few useless code.

I think this code is there to future proof in case more fields are
added. Please just post a bugfix patch. Also a Fixes tag can't hurt.
Probably

commit 5442b854eaf921588e24d5711640ab71e59cb1b8
Author: Eric Auger <eric.auger@redhat.com>
Date:   Fri Feb 14 14:27:37 2020 +0100

    virtio-iommu: Decode the command payload
    

Thanks!

> Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
> ---
>  hw/virtio/virtio-iommu.c | 8 +++-----
>  1 file changed, 3 insertions(+), 5 deletions(-)
> 
> diff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c
> index 7c122ab95780..bc96caf37c0c 100644
> --- a/hw/virtio/virtio-iommu.c
> +++ b/hw/virtio/virtio-iommu.c
> @@ -656,19 +656,16 @@ static int virtio_iommu_probe(VirtIOIOMMU *s,
>                                uint8_t *buf)
>  {
>      uint32_t ep_id = le32_to_cpu(req->endpoint);
> -    size_t free = VIOMMU_PROBE_SIZE;
>      ssize_t count;
>  
>      if (!virtio_iommu_mr(s, ep_id)) {
>          return VIRTIO_IOMMU_S_NOENT;
>      }
>  
> -    count = virtio_iommu_fill_resv_mem_prop(s, ep_id, buf, free);
> +    count = virtio_iommu_fill_resv_mem_prop(s, ep_id, buf, 
> VIOMMU_PROBE_SIZE);
>      if (count < 0) {
>          return VIRTIO_IOMMU_S_INVAL;
>      }
> -    buf += count;
> -    free -= count;
>  
>      return VIRTIO_IOMMU_S_OK;
>  }
> @@ -708,7 +705,8 @@ static int virtio_iommu_handle_probe(VirtIOIOMMU *s,
>                                       uint8_t *buf)
>  {
>      struct virtio_iommu_req_probe req;
> -    int ret = virtio_iommu_iov_to_req(iov, iov_cnt, &req, sizeof(req));
> +    int ret = virtio_iommu_iov_to_req(iov, iov_cnt, &req,
> +                    sizeof(req) + sizeof(struct virtio_iommu_req_tail));
>  
>      return ret ? ret : virtio_iommu_probe(s, &req, buf);
>  }
> -- 
> 2.25.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]