Blame SOURCES/kvm-virtio-iommu-Fix-the-partial-copy-of-probe-request.patch

29b115
From b681247c29b59af40c86f8f0ae5709138ae9bf1a Mon Sep 17 00:00:00 2001
29b115
From: Zhenzhong Duan <zhenzhong.duan@intel.com>
29b115
Date: Thu, 23 Jun 2022 10:31:52 +0800
29b115
Subject: [PATCH 04/17] virtio-iommu: Fix the partial copy of probe request
29b115
29b115
RH-Author: Eric Auger <eric.auger@redhat.com>
29b115
RH-MergeRequest: 105: virtio-iommu: Fix bypass mode for assigned devices
29b115
RH-Commit: [4/5] c402164414a8e69bbb6df20af3c2b6d2589d6f3e (eauger1/centos-qemu-kvm)
29b115
RH-Bugzilla: 2100106
29b115
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
29b115
RH-Acked-by: Peter Xu <peterx@redhat.com>
29b115
RH-Acked-by: Cornelia Huck <cohuck@redhat.com>
29b115
29b115
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2100106
29b115
29b115
The structure of probe request doesn't include the tail, this leads
29b115
to a few field missed to be copied. Currently this isn't an issue as
29b115
those missed field belong to reserved field, just in case reserved
29b115
field will be used in the future.
29b115
29b115
Changed 4th parameter of virtio_iommu_iov_to_req() to receive size
29b115
of device-readable part.
29b115
29b115
Fixes: 1733eebb9e75b ("virtio-iommu: Implement RESV_MEM probe request")
29b115
Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
29b115
Message-Id: <20220623023152.3473231-1-zhenzhong.duan@intel.com>
29b115
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
29b115
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
29b115
Reviewed-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
29b115
Reviewed-by: Eric Auger <eric.auger@redhat.com>
29b115
(cherry picked from commit 45461aace83d961e933b27519b81d17b4c690514)
29b115
Signed-off-by: Eric Auger <eric.auger@redhat.com>
29b115
---
29b115
 hw/virtio/virtio-iommu.c | 8 ++++----
29b115
 1 file changed, 4 insertions(+), 4 deletions(-)
29b115
29b115
diff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c
29b115
index e970d4d5a6..44a041dec9 100644
29b115
--- a/hw/virtio/virtio-iommu.c
29b115
+++ b/hw/virtio/virtio-iommu.c
29b115
@@ -676,11 +676,10 @@ static int virtio_iommu_probe(VirtIOIOMMU *s,
29b115
 
29b115
 static int virtio_iommu_iov_to_req(struct iovec *iov,
29b115
                                    unsigned int iov_cnt,
29b115
-                                   void *req, size_t req_sz)
29b115
+                                   void *req, size_t payload_sz)
29b115
 {
29b115
-    size_t sz, payload_sz = req_sz - sizeof(struct virtio_iommu_req_tail);
29b115
+    size_t sz = iov_to_buf(iov, iov_cnt, 0, req, payload_sz);
29b115
 
29b115
-    sz = iov_to_buf(iov, iov_cnt, 0, req, payload_sz);
29b115
     if (unlikely(sz != payload_sz)) {
29b115
         return VIRTIO_IOMMU_S_INVAL;
29b115
     }
29b115
@@ -693,7 +692,8 @@ static int virtio_iommu_handle_ ## __req(VirtIOIOMMU *s,                \
29b115
                                          unsigned int iov_cnt)          \
29b115
 {                                                                       \
29b115
     struct virtio_iommu_req_ ## __req req;                              \
29b115
-    int ret = virtio_iommu_iov_to_req(iov, iov_cnt, &req, sizeof(req)); \
29b115
+    int ret = virtio_iommu_iov_to_req(iov, iov_cnt, &req,               \
29b115
+                    sizeof(req) - sizeof(struct virtio_iommu_req_tail));\
29b115
                                                                         \
29b115
     return ret ? ret : virtio_iommu_ ## __req(s, &req;;                 \
29b115
 }
29b115
-- 
29b115
2.31.1
29b115