61 lines
2.7 KiB
Diff
61 lines
2.7 KiB
Diff
|
|
From 1e73eaa18c753157046d22e43333fd9bc711eaa9 Mon Sep 17 00:00:00 2001
|
||
|
|
From: tangbinzy <tangbin_yewu@cmss.chinamobile.com>
|
||
|
|
Date: Fri, 17 Nov 2023 09:55:19 +0000
|
||
|
|
Subject: [PATCH] virtio-iommu: Fix the partial copy of probe request mainline
|
||
|
|
inclusion commit 45461aace83d961e933b27519b81d17b4c690514 category: bugfix
|
||
|
|
|
||
|
|
---------------------------------------------------------------
|
||
|
|
|
||
|
|
The structure of probe request doesn't include the tail, this leads
|
||
|
|
to a few field 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.
|
||
|
|
|
||
|
|
Changed 4th parameter of virtio_iommu_iov_to_req() to receive size
|
||
|
|
of device-readable part.
|
||
|
|
|
||
|
|
Fixes: 1733eebb9e75b ("virtio-iommu: Implement RESV_MEM probe request")
|
||
|
|
Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
|
||
|
|
Message-Id: <20220623023152.3473231-1-zhenzhong.duan@intel.com>
|
||
|
|
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
|
||
|
|
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
|
||
|
|
Reviewed-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
|
||
|
|
Reviewed-by: Eric Auger <eric.auger@redhat.com>
|
||
|
|
|
||
|
|
Signed-off-by: tangbinzy <tangbin_yewu@cmss.chinamobile.com>
|
||
|
|
---
|
||
|
|
hw/virtio/virtio-iommu.c | 8 ++++----
|
||
|
|
1 file changed, 4 insertions(+), 4 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c
|
||
|
|
index ed47d4cb64..ae33d93b11 100644
|
||
|
|
--- a/hw/virtio/virtio-iommu.c
|
||
|
|
+++ b/hw/virtio/virtio-iommu.c
|
||
|
|
@@ -547,11 +547,10 @@ static int virtio_iommu_probe(VirtIOIOMMU *s,
|
||
|
|
|
||
|
|
static int virtio_iommu_iov_to_req(struct iovec *iov,
|
||
|
|
unsigned int iov_cnt,
|
||
|
|
- void *req, size_t req_sz)
|
||
|
|
+ void *req, size_t payload_sz)
|
||
|
|
{
|
||
|
|
- size_t sz, payload_sz = req_sz - sizeof(struct virtio_iommu_req_tail);
|
||
|
|
+ size_t sz = iov_to_buf(iov, iov_cnt, 0, req, payload_sz);
|
||
|
|
|
||
|
|
- sz = iov_to_buf(iov, iov_cnt, 0, req, payload_sz);
|
||
|
|
if (unlikely(sz != payload_sz)) {
|
||
|
|
return VIRTIO_IOMMU_S_INVAL;
|
||
|
|
}
|
||
|
|
@@ -564,7 +563,8 @@ static int virtio_iommu_handle_ ## __req(VirtIOIOMMU *s, \
|
||
|
|
unsigned int iov_cnt) \
|
||
|
|
{ \
|
||
|
|
struct virtio_iommu_req_ ## __req 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_ ## __req(s, &req); \
|
||
|
|
}
|
||
|
|
--
|
||
|
|
2.27.0
|
||
|
|
|