[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 13/16] virtio-iommu: Fix endianness in get_config
From: |
Thomas Huth |
Subject: |
[PULL 13/16] virtio-iommu: Fix endianness in get_config |
Date: |
Wed, 15 Dec 2021 08:33:59 +0100 |
From: Eric Auger <eric.auger@redhat.com>
Endianess is not properly handled when populating
the returned config. Use the cpu_to_le* primitives
for each separate field. Also, while at it, trace
the domain range start.
Reported-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Eric Auger <eric.auger@redhat.com>
Reviewed-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
Message-Id: <20211127072910.1261824-3-eric.auger@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
hw/virtio/trace-events | 2 +-
hw/virtio/virtio-iommu.c | 24 ++++++++++++++++--------
2 files changed, 17 insertions(+), 9 deletions(-)
diff --git a/hw/virtio/trace-events b/hw/virtio/trace-events
index 54bd7da00c..f7ad6be5fb 100644
--- a/hw/virtio/trace-events
+++ b/hw/virtio/trace-events
@@ -91,7 +91,7 @@ virtio_mmio_setting_irq(int level) "virtio_mmio setting IRQ
%d"
virtio_iommu_device_reset(void) "reset!"
virtio_iommu_get_features(uint64_t features) "device supports
features=0x%"PRIx64
virtio_iommu_device_status(uint8_t status) "driver status = %d"
-virtio_iommu_get_config(uint64_t page_size_mask, uint64_t start, uint64_t end,
uint32_t domain_range, uint32_t probe_size) "page_size_mask=0x%"PRIx64"
start=0x%"PRIx64" end=0x%"PRIx64" domain_range=%d probe_size=0x%x"
+virtio_iommu_get_config(uint64_t page_size_mask, uint64_t start, uint64_t end,
uint32_t domain_start, uint32_t domain_end, uint32_t probe_size)
"page_size_mask=0x%"PRIx64" input range start=0x%"PRIx64" input range
end=0x%"PRIx64" domain range start=%d domain range end=%d probe_size=0x%x"
virtio_iommu_attach(uint32_t domain_id, uint32_t ep_id) "domain=%d endpoint=%d"
virtio_iommu_detach(uint32_t domain_id, uint32_t ep_id) "domain=%d endpoint=%d"
virtio_iommu_map(uint32_t domain_id, uint64_t virt_start, uint64_t virt_end,
uint64_t phys_start, uint32_t flags) "domain=%d virt_start=0x%"PRIx64"
virt_end=0x%"PRIx64 " phys_start=0x%"PRIx64" flags=%d"
diff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c
index 645c0aa399..30ee09187b 100644
--- a/hw/virtio/virtio-iommu.c
+++ b/hw/virtio/virtio-iommu.c
@@ -822,14 +822,22 @@ unlock:
static void virtio_iommu_get_config(VirtIODevice *vdev, uint8_t *config_data)
{
VirtIOIOMMU *dev = VIRTIO_IOMMU(vdev);
- struct virtio_iommu_config *config = &dev->config;
-
- trace_virtio_iommu_get_config(config->page_size_mask,
- config->input_range.start,
- config->input_range.end,
- config->domain_range.end,
- config->probe_size);
- memcpy(config_data, &dev->config, sizeof(struct virtio_iommu_config));
+ struct virtio_iommu_config *dev_config = &dev->config;
+ struct virtio_iommu_config *out_config = (void *)config_data;
+
+ out_config->page_size_mask = cpu_to_le64(dev_config->page_size_mask);
+ out_config->input_range.start = cpu_to_le64(dev_config->input_range.start);
+ out_config->input_range.end = cpu_to_le64(dev_config->input_range.end);
+ out_config->domain_range.start =
cpu_to_le32(dev_config->domain_range.start);
+ out_config->domain_range.end = cpu_to_le32(dev_config->domain_range.end);
+ out_config->probe_size = cpu_to_le32(dev_config->probe_size);
+
+ trace_virtio_iommu_get_config(dev_config->page_size_mask,
+ dev_config->input_range.start,
+ dev_config->input_range.end,
+ dev_config->domain_range.start,
+ dev_config->domain_range.end,
+ dev_config->probe_size);
}
static uint64_t virtio_iommu_get_features(VirtIODevice *vdev, uint64_t f,
--
2.27.0
- [PULL 05/16] tests/qtest: Run the PPC 32-bit tests with the 64-bit target binary, too, (continued)
- [PULL 05/16] tests/qtest: Run the PPC 32-bit tests with the 64-bit target binary, too, Thomas Huth, 2021/12/15
- [PULL 02/16] tests/qtest: add some tests for virtio-net failover, Thomas Huth, 2021/12/15
- [PULL 01/16] qtest/libqos: add a function to initialize secondary PCI buses, Thomas Huth, 2021/12/15
- [PULL 04/16] tests/libqtest: add a migration test with two couples of failover devices, Thomas Huth, 2021/12/15
- [PULL 06/16] tests/qtest: Fence the tests that need xlnx-zcu102 with CONFIG_XLNX_ZYNQMP_ARM, Thomas Huth, 2021/12/15
- [PULL 07/16] tests/qtest: Add a function that gets a list with available machine types, Thomas Huth, 2021/12/15
- [PULL 10/16] gitlab-ci.d/buildtest: Add jobs that run the device-crash-test, Thomas Huth, 2021/12/15
- [PULL 09/16] Move the libssh setup from configure to meson.build, Thomas Huth, 2021/12/15
- [PULL 08/16] tests/qtest: Add a function to check whether a machine is available, Thomas Huth, 2021/12/15
- [PULL 11/16] gitlab-ci: Add cirrus-ci based tests for NetBSD and OpenBSD, Thomas Huth, 2021/12/15
- [PULL 13/16] virtio-iommu: Fix endianness in get_config,
Thomas Huth <=
- [PULL 12/16] virtio-iommu: Remove set_config callback, Thomas Huth, 2021/12/15
- [PULL 14/16] virtio-iommu: Fix the domain_range end, Thomas Huth, 2021/12/15
- [PULL 15/16] tests: qtest: Add virtio-iommu test, Thomas Huth, 2021/12/15
- [PULL 16/16] gitlab-ci: Test compilation on Windows with MSYS2, Thomas Huth, 2021/12/15
- Re: [PULL 00/16] qtest and gitlab-CI improvements, Richard Henderson, 2021/12/15
- Re: [PULL 00/16] qtest and gitlab-CI improvements, Philippe Mathieu-Daudé, 2021/12/18