From e34f86a2f91c39d610d58baa6f4c9ed9a5a5d791 Mon Sep 17 00:00:00 2001 From: Guenter Roeck Date: Mon, 12 Dec 2022 09:03:17 -0600 Subject: [PATCH 001/174] target/sh4: Mask restore of env->flags from tb->flags The values in env->flags are a subset of tb->flags. Restore only the bits that belong. Cc: qemu-stable@nongnu.org Fixes: ab419fd8a035 ("target/sh4: Fix TB_FLAG_UNALIGN") Signed-off-by: Guenter Roeck Message-ID: <20221212011345.GA2235238@roeck-us.net> [rth: Reduce to only the the superh_cpu_synchronize_from_tb change] Signed-off-by: Richard Henderson (cherry picked from commit bc2331635ce18ff068d2bb1e493bc546e1f786e1) Signed-off-by: Michael Tokarev --- target/sh4/cpu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/sh4/cpu.c b/target/sh4/cpu.c index 453268392b..827cee25af 100644 --- a/target/sh4/cpu.c +++ b/target/sh4/cpu.c @@ -47,7 +47,7 @@ static void superh_cpu_synchronize_from_tb(CPUState *cs, SuperHCPU *cpu = SUPERH_CPU(cs); cpu->env.pc = tb_pc(tb); - cpu->env.flags = tb->flags; + cpu->env.flags = tb->flags & TB_FLAG_ENVFLAGS_MASK; } static void superh_restore_state_to_opc(CPUState *cs, From f16011abc161e0fa6ac2bea78aa7ebacfb173e59 Mon Sep 17 00:00:00 2001 From: Jason Wang Date: Fri, 16 Dec 2022 11:35:52 +0800 Subject: [PATCH 002/174] vhost: fix vq dirty bitmap syncing when vIOMMU is enabled When vIOMMU is enabled, the vq->used_phys is actually the IOVA not GPA. So we need to translate it to GPA before the syncing otherwise we may hit the following crash since IOVA could be out of the scope of the GPA log size. This could be noted when using virtio-IOMMU with vhost using 1G memory. Fixes: c471ad0e9bd46 ("vhost_net: device IOTLB support") Cc: qemu-stable@nongnu.org Tested-by: Lei Yang Reported-by: Yalan Zhang Signed-off-by: Jason Wang Message-Id: <20221216033552.77087-1-jasowang@redhat.com> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin (cherry picked from commit 345cc1cbcbce2bab00abc2b88338d7d89c702d6b) Signed-off-by: Michael Tokarev --- hw/virtio/vhost.c | 84 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 64 insertions(+), 20 deletions(-) diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index 7fb008bc9e..fdcd1a8fdf 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -20,6 +20,7 @@ #include "qemu/range.h" #include "qemu/error-report.h" #include "qemu/memfd.h" +#include "qemu/log.h" #include "standard-headers/linux/vhost_types.h" #include "hw/virtio/virtio-bus.h" #include "hw/virtio/virtio-access.h" @@ -106,6 +107,24 @@ static void vhost_dev_sync_region(struct vhost_dev *dev, } } +static bool vhost_dev_has_iommu(struct vhost_dev *dev) +{ + VirtIODevice *vdev = dev->vdev; + + /* + * For vhost, VIRTIO_F_IOMMU_PLATFORM means the backend support + * incremental memory mapping API via IOTLB API. For platform that + * does not have IOMMU, there's no need to enable this feature + * which may cause unnecessary IOTLB miss/update transactions. + */ + if (vdev) { + return virtio_bus_device_iommu_enabled(vdev) && + virtio_host_has_feature(vdev, VIRTIO_F_IOMMU_PLATFORM); + } else { + return false; + } +} + static int vhost_sync_dirty_bitmap(struct vhost_dev *dev, MemoryRegionSection *section, hwaddr first, @@ -137,8 +156,51 @@ static int vhost_sync_dirty_bitmap(struct vhost_dev *dev, continue; } - vhost_dev_sync_region(dev, section, start_addr, end_addr, vq->used_phys, - range_get_last(vq->used_phys, vq->used_size)); + if (vhost_dev_has_iommu(dev)) { + IOMMUTLBEntry iotlb; + hwaddr used_phys = vq->used_phys, used_size = vq->used_size; + hwaddr phys, s, offset; + + while (used_size) { + rcu_read_lock(); + iotlb = address_space_get_iotlb_entry(dev->vdev->dma_as, + used_phys, + true, + MEMTXATTRS_UNSPECIFIED); + rcu_read_unlock(); + + if (!iotlb.target_as) { + qemu_log_mask(LOG_GUEST_ERROR, "translation " + "failure for used_iova %"PRIx64"\n", + used_phys); + return -EINVAL; + } + + offset = used_phys & iotlb.addr_mask; + phys = iotlb.translated_addr + offset; + + /* + * Distance from start of used ring until last byte of + * IOMMU page. + */ + s = iotlb.addr_mask - offset; + /* + * Size of used ring, or of the part of it until end + * of IOMMU page. To avoid zero result, do the adding + * outside of MIN(). + */ + s = MIN(s, used_size - 1) + 1; + + vhost_dev_sync_region(dev, section, start_addr, end_addr, phys, + range_get_last(phys, s)); + used_size -= s; + used_phys += s; + } + } else { + vhost_dev_sync_region(dev, section, start_addr, + end_addr, vq->used_phys, + range_get_last(vq->used_phys, vq->used_size)); + } } return 0; } @@ -306,24 +368,6 @@ static inline void vhost_dev_log_resize(struct vhost_dev *dev, uint64_t size) dev->log_size = size; } -static bool vhost_dev_has_iommu(struct vhost_dev *dev) -{ - VirtIODevice *vdev = dev->vdev; - - /* - * For vhost, VIRTIO_F_IOMMU_PLATFORM means the backend support - * incremental memory mapping API via IOTLB API. For platform that - * does not have IOMMU, there's no need to enable this feature - * which may cause unnecessary IOTLB miss/update transactions. - */ - if (vdev) { - return virtio_bus_device_iommu_enabled(vdev) && - virtio_host_has_feature(vdev, VIRTIO_F_IOMMU_PLATFORM); - } else { - return false; - } -} - static void *vhost_memory_map(struct vhost_dev *dev, hwaddr addr, hwaddr *plen, bool is_write) { From 5f43c7786eaec3689aff3f2ea6101c54828a7f3e Mon Sep 17 00:00:00 2001 From: Chenyi Qiang Date: Fri, 16 Dec 2022 14:22:31 +0800 Subject: [PATCH 003/174] virtio-mem: Fix the bitmap index of the section offset vmem->bitmap indexes the memory region of the virtio-mem backend at a granularity of block_size. To calculate the index of target section offset, the block_size should be divided instead of the bitmap_size. Fixes: 2044969f0b ("virtio-mem: Implement RamDiscardManager interface") Signed-off-by: Chenyi Qiang Message-Id: <20221216062231.11181-1-chenyi.qiang@intel.com> Reviewed-by: David Hildenbrand Reviewed-by: Michael S. Tsirkin Cc: qemu-stable@nongnu.org Signed-off-by: David Hildenbrand (cherry picked from commit b11cf32e07a2f7ff0d171b89497381a04c9d07e0) Signed-off-by: Michael Tokarev --- hw/virtio/virtio-mem.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/virtio/virtio-mem.c b/hw/virtio/virtio-mem.c index ed170def48..e19ee817fe 100644 --- a/hw/virtio/virtio-mem.c +++ b/hw/virtio/virtio-mem.c @@ -235,7 +235,7 @@ static int virtio_mem_for_each_plugged_section(const VirtIOMEM *vmem, uint64_t offset, size; int ret = 0; - first_bit = s->offset_within_region / vmem->bitmap_size; + first_bit = s->offset_within_region / vmem->block_size; first_bit = find_next_bit(vmem->bitmap, vmem->bitmap_size, first_bit); while (first_bit < vmem->bitmap_size) { MemoryRegionSection tmp = *s; @@ -267,7 +267,7 @@ static int virtio_mem_for_each_unplugged_section(const VirtIOMEM *vmem, uint64_t offset, size; int ret = 0; - first_bit = s->offset_within_region / vmem->bitmap_size; + first_bit = s->offset_within_region / vmem->block_size; first_bit = find_next_zero_bit(vmem->bitmap, vmem->bitmap_size, first_bit); while (first_bit < vmem->bitmap_size) { MemoryRegionSection tmp = *s; From a2093dd6fecec34079b4b0d3a7be218cfcd5b69b Mon Sep 17 00:00:00 2001 From: Chenyi Qiang Date: Wed, 28 Dec 2022 17:03:12 +0800 Subject: [PATCH 004/174] virtio-mem: Fix the iterator variable in a vmem->rdl_list loop MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It should be the variable rdl2 to revert the already-notified listeners. Fixes: 2044969f0b ("virtio-mem: Implement RamDiscardManager interface") Signed-off-by: Chenyi Qiang Message-Id: <20221228090312.17276-1-chenyi.qiang@intel.com> Cc: qemu-stable@nongnu.org Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: David Hildenbrand (cherry picked from commit 29f1b328e3b767cba2661920a8470738469b9e36) Signed-off-by: Michael Tokarev --- hw/virtio/virtio-mem.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/virtio/virtio-mem.c b/hw/virtio/virtio-mem.c index e19ee817fe..56db586c89 100644 --- a/hw/virtio/virtio-mem.c +++ b/hw/virtio/virtio-mem.c @@ -341,7 +341,7 @@ static int virtio_mem_notify_plug(VirtIOMEM *vmem, uint64_t offset, if (ret) { /* Notify all already-notified listeners. */ QLIST_FOREACH(rdl2, &vmem->rdl_list, next) { - MemoryRegionSection tmp = *rdl->section; + MemoryRegionSection tmp = *rdl2->section; if (rdl2 == rdl) { break; From 305c0f8c54071fd50364c01438f9979af5110c97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Thu, 5 Jan 2023 11:43:04 +0000 Subject: [PATCH 005/174] target/arm: fix handling of HLT semihosting in system mode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The check semihosting_enabled() wants to know if the guest is currently in user mode. Unlike the other cases the test was inverted causing us to block semihosting calls in non-EL0 modes. Cc: qemu-stable@nongnu.org Fixes: 19b26317e9 (target/arm: Honour -semihosting-config userspace=on) Signed-off-by: Alex Bennée Reviewed-by: Peter Maydell Signed-off-by: Peter Maydell (cherry picked from commit 9788d4c007cbde7cda1b7a577b8b836335eb2b73) Signed-off-by: Michael Tokarev --- target/arm/translate.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/arm/translate.c b/target/arm/translate.c index 74a903072f..1dcaefb8e7 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -1184,7 +1184,7 @@ static inline void gen_hlt(DisasContext *s, int imm) * semihosting, to provide some semblance of security * (and for consistency with our 32-bit semihosting). */ - if (semihosting_enabled(s->current_el != 0) && + if (semihosting_enabled(s->current_el == 0) && (imm == (s->thumb ? 0x3c : 0xf000))) { gen_exception_internal_insn(s, EXCP_SEMIHOST); return; From 6647b6edeaf65495bea867fc5b16c0eccde6f153 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 14 Dec 2022 13:25:00 +0100 Subject: [PATCH 006/174] meson: accept relative symlinks in "meson introspect --installed" data When installing shared libraries, as is the case for libvfio-user.so, Meson will include relative symbolic links in the output of "meson introspect --installed": { "libvfio-user.so": "/usr/local/lib64/libvfio-user.so", ... } In the case of scripts/symlink-install-tree.py, this will be a symbolic link to a symbolic link but, in any case, there is no issue in creating it. Cc: qemu-stable@nongnu.org Signed-off-by: Paolo Bonzini (cherry picked from commit f32eb0021a85efaca97f69b0e9201737562a8e4f) Signed-off-by: Michael Tokarev --- scripts/symlink-install-tree.py | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/symlink-install-tree.py b/scripts/symlink-install-tree.py index a5bf0b0d6d..67cb86dd52 100644 --- a/scripts/symlink-install-tree.py +++ b/scripts/symlink-install-tree.py @@ -17,7 +17,6 @@ def destdir_join(d1: str, d2: str) -> str: out = subprocess.run([*introspect.split(' '), '--installed'], stdout=subprocess.PIPE, check=True).stdout for source, dest in json.loads(out).items(): - assert os.path.isabs(source) bundle_dest = destdir_join('qemu-bundle', dest) path = os.path.dirname(bundle_dest) try: From e05827b632679ec632896cf354d7e8d5b8b50cdc Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Sat, 3 Dec 2022 11:57:44 -0600 Subject: [PATCH 007/174] target/riscv: Set pc_succ_insn for !rvc illegal insn MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Failure to set pc_succ_insn may result in a TB covering zero bytes, which triggers an assert within the code generator. Cc: qemu-stable@nongnu.org Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1224 Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Reviewed-by: Philippe Mathieu-Daudé Message-Id: <20221203175744.151365-1-richard.henderson@linaro.org> [ Changes by AF: - Add missing run-plugin-test-noc-% line ] Signed-off-by: Alistair Francis (cherry picked from commit ec2918b467228e7634f1dd5f35033ad3021b6ef7) Signed-off-by: Michael Tokarev --- target/riscv/translate.c | 12 ++++-------- tests/tcg/Makefile.target | 2 ++ tests/tcg/riscv64/Makefile.target | 6 ++++++ tests/tcg/riscv64/test-noc.S | 32 +++++++++++++++++++++++++++++++ 4 files changed, 44 insertions(+), 8 deletions(-) create mode 100644 tests/tcg/riscv64/test-noc.S diff --git a/target/riscv/translate.c b/target/riscv/translate.c index db123da5ec..1ed4bb5ec3 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -1064,14 +1064,10 @@ static void decode_opc(CPURISCVState *env, DisasContext *ctx, uint16_t opcode) /* Check for compressed insn */ if (insn_len(opcode) == 2) { - if (!has_ext(ctx, RVC)) { - gen_exception_illegal(ctx); - } else { - ctx->opcode = opcode; - ctx->pc_succ_insn = ctx->base.pc_next + 2; - if (decode_insn16(ctx, opcode)) { - return; - } + ctx->opcode = opcode; + ctx->pc_succ_insn = ctx->base.pc_next + 2; + if (has_ext(ctx, RVC) && decode_insn16(ctx, opcode)) { + return; } } else { uint32_t opcode32 = opcode; diff --git a/tests/tcg/Makefile.target b/tests/tcg/Makefile.target index 75257f2b29..14bc013181 100644 --- a/tests/tcg/Makefile.target +++ b/tests/tcg/Makefile.target @@ -117,6 +117,8 @@ endif %: %.c $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS) +%: %.S + $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS) else # For softmmu targets we include a different Makefile fragement as the # build options for bare programs are usually pretty different. They diff --git a/tests/tcg/riscv64/Makefile.target b/tests/tcg/riscv64/Makefile.target index b5b89dfb0e..cc3ed65ffd 100644 --- a/tests/tcg/riscv64/Makefile.target +++ b/tests/tcg/riscv64/Makefile.target @@ -4,3 +4,9 @@ VPATH += $(SRC_PATH)/tests/tcg/riscv64 TESTS += test-div TESTS += noexec + +# Disable compressed instructions for test-noc +TESTS += test-noc +test-noc: LDFLAGS = -nostdlib -static +run-test-noc: QEMU_OPTS += -cpu rv64,c=false +run-plugin-test-noc-%: QEMU_OPTS += -cpu rv64,c=false diff --git a/tests/tcg/riscv64/test-noc.S b/tests/tcg/riscv64/test-noc.S new file mode 100644 index 0000000000..e29d60c8b3 --- /dev/null +++ b/tests/tcg/riscv64/test-noc.S @@ -0,0 +1,32 @@ +#include + + .text + .globl _start +_start: + .option norvc + li a0, 4 /* SIGILL */ + la a1, sa + li a2, 0 + li a3, 8 + li a7, __NR_rt_sigaction + scall + + .option rvc + li a0, 1 + j exit + .option norvc + +pass: + li a0, 0 +exit: + li a7, __NR_exit + scall + + .data + /* struct kernel_sigaction sa = { .sa_handler = pass }; */ + .type sa, @object + .size sa, 32 +sa: + .dword pass + .zero 24 + From 6a3aa014c54535d0ac67516b10ea17778bbafffd Mon Sep 17 00:00:00 2001 From: Laszlo Ersek Date: Thu, 5 Jan 2023 17:18:04 +0100 Subject: [PATCH 008/174] acpi: cpuhp: fix guest-visible maximum access size to the legacy reg block MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The modern ACPI CPU hotplug interface was introduced in the following series (aa1dd39ca307..679dd1a957df), released in v2.7.0: 1 abd49bc2ed2f docs: update ACPI CPU hotplug spec with new protocol 2 16bcab97eb9f pc: piix4/ich9: add 'cpu-hotplug-legacy' property 3 5e1b5d93887b acpi: cpuhp: add CPU devices AML with _STA method 4 ac35f13ba8f8 pc: acpi: introduce AcpiDeviceIfClass.madt_cpu hook 5 d2238cb6781d acpi: cpuhp: implement hot-add parts of CPU hotplug interface 6 8872c25a26cc acpi: cpuhp: implement hot-remove parts of CPU hotplug interface 7 76623d00ae57 acpi: cpuhp: add cpu._OST handling 8 679dd1a957df pc: use new CPU hotplug interface since 2.7 machine type Before patch#1, "docs/specs/acpi_cpu_hotplug.txt" only specified 1-byte accesses for the hotplug register block. Patch#1 preserved the same restriction for the legacy register block, but: - it specified DWORD accesses for some of the modern registers, - in particular, the switch from the legacy block to the modern block would require a DWORD write to the *legacy* block. The latter functionality was then implemented in cpu_status_write() [hw/acpi/cpu_hotplug.c], in patch#8. Unfortunately, all DWORD accesses depended on a dormant bug: the one introduced in earlier commit a014ed07bd5a ("memory: accept mismatching sizes in memory_region_access_valid", 2013-05-29); first released in v1.6.0. Due to commit a014ed07bd5a, the DWORD accesses to the *legacy* CPU hotplug register block would work in spite of the above series *not* relaxing "valid.max_access_size = 1" in "hw/acpi/cpu_hotplug.c": > static const MemoryRegionOps AcpiCpuHotplug_ops = { > .read = cpu_status_read, > .write = cpu_status_write, > .endianness = DEVICE_LITTLE_ENDIAN, > .valid = { > .min_access_size = 1, > .max_access_size = 1, > }, > }; Later, in commits e6d0c3ce6895 ("acpi: cpuhp: introduce 'Command data 2' field", 2020-01-22) and ae340aa3d256 ("acpi: cpuhp: spec: add typical usecases", 2020-01-22), first released in v5.0.0, the modern CPU hotplug interface (including the documentation) was extended with another DWORD *read* access, namely to the "Command data 2" register, which would be important for the guest to confirm whether it managed to switch the register block from legacy to modern. This functionality too silently depended on the bug from commit a014ed07bd5a. In commit 5d971f9e6725 ('memory: Revert "memory: accept mismatching sizes in memory_region_access_valid"', 2020-06-26), first released in v5.1.0, the bug from commit a014ed07bd5a was fixed (the commit was reverted). That swiftly exposed the bug in "AcpiCpuHotplug_ops", still present from the v2.7.0 series quoted at the top -- namely the fact that "valid.max_access_size = 1" didn't match what the guest was supposed to do, according to the spec ("docs/specs/acpi_cpu_hotplug.txt"). The symptom is that the "modern interface negotiation protocol" described in commit ae340aa3d256: > + Use following steps to detect and enable modern CPU hotplug interface: > + 1. Store 0x0 to the 'CPU selector' register, > + attempting to switch to modern mode > + 2. Store 0x0 to the 'CPU selector' register, > + to ensure valid selector value > + 3. Store 0x0 to the 'Command field' register, > + 4. Read the 'Command data 2' register. > + If read value is 0x0, the modern interface is enabled. > + Otherwise legacy or no CPU hotplug interface available falls apart for the guest: steps 1 and 2 are lost, because they are DWORD writes; so no switching happens. Step 3 (a single-byte write) is not lost, but it has no effect; see the condition in cpu_status_write() in patch#8. And step 4 *misleads* the guest into thinking that the switch worked: the DWORD read is lost again -- it returns zero to the guest without ever reaching the device model, so the guest never learns the switch didn't work. This means that guest behavior centered on the "Command data 2" register worked *only* in the v5.0.0 release; it got effectively regressed in v5.1.0. To make things *even more* complicated, the breakage was (and remains, as of today) visible with TCG acceleration only. Commit 5d971f9e6725 makes no difference with KVM acceleration -- the DWORD accesses still work, despite "valid.max_access_size = 1". As commit 5d971f9e6725 suggests, fix the problem by raising "valid.max_access_size" to 4 -- the spec now clearly instructs the guest to perform DWORD accesses to the legacy register block too, for enabling (and verifying!) the modern block. In order to keep compatibility for the device model implementation though, set "impl.max_access_size = 1", so that wide accesses be split before they reach the legacy read/write handlers, like they always have been on KVM, and like they were on TCG before 5d971f9e6725 (v5.1.0). Tested with: - OVMF IA32 + qemu-system-i386, CPU hotplug/hot-unplug with SMM, intermixed with ACPI S3 suspend/resume, using KVM accel (regression-test); - OVMF IA32X64 + qemu-system-x86_64, CPU hotplug/hot-unplug with SMM, intermixed with ACPI S3 suspend/resume, using KVM accel (regression-test); - OVMF IA32 + qemu-system-i386, SMM enabled, using TCG accel; verified the register block switch and the present/possible CPU counting through the modern hotplug interface, during OVMF boot (bugfix test); - I do not have any testcase (guest payload) for regression-testing CPU hotplug through the *legacy* CPU hotplug register block. Cc: "Michael S. Tsirkin" Cc: Ani Sinha Cc: Ard Biesheuvel Cc: Igor Mammedov Cc: Paolo Bonzini Cc: Peter Maydell Cc: Philippe Mathieu-Daudé Cc: qemu-stable@nongnu.org Ref: "IO port write width clamping differs between TCG and KVM" Link: http://mid.mail-archive.com/aaedee84-d3ed-a4f9-21e7-d221a28d1683@redhat.com Link: https://lists.gnu.org/archive/html/qemu-devel/2023-01/msg00199.html Reported-by: Ard Biesheuvel Signed-off-by: Laszlo Ersek Tested-by: Ard Biesheuvel Reviewed-by: Philippe Mathieu-Daudé Tested-by: Igor Mammedov Message-Id: <20230105161804.82486-1-lersek@redhat.com> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin (cherry picked from commit dab30fbef3896bb652a09d46c37d3f55657cbcbb) Signed-off-by: Michael Tokarev --- hw/acpi/cpu_hotplug.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hw/acpi/cpu_hotplug.c b/hw/acpi/cpu_hotplug.c index 53654f8638..ff14c3f410 100644 --- a/hw/acpi/cpu_hotplug.c +++ b/hw/acpi/cpu_hotplug.c @@ -52,6 +52,9 @@ static const MemoryRegionOps AcpiCpuHotplug_ops = { .endianness = DEVICE_LITTLE_ENDIAN, .valid = { .min_access_size = 1, + .max_access_size = 4, + }, + .impl = { .max_access_size = 1, }, }; From 9d86da9e07d02362bca4d21cca3ebf8af4f32522 Mon Sep 17 00:00:00 2001 From: Klaus Jensen Date: Mon, 12 Dec 2022 11:30:52 +0100 Subject: [PATCH 009/174] hw/nvme: fix missing endian conversions for doorbell buffers The eventidx and doorbell value are not handling endianness correctly. Fix this. Fixes: 3f7fe8de3d49 ("hw/nvme: Implement shadow doorbell buffer support") Cc: qemu-stable@nongnu.org Reported-by: Guenter Roeck Reviewed-by: Keith Busch Signed-off-by: Klaus Jensen (cherry picked from commit 2fda0726e5149e032acfa5fe442db56cd6433c4c) Signed-off-by: Michael Tokarev Conflicts: hw/nvme/ctrl.c --- hw/nvme/ctrl.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c index e54276dc1d..98d8e34109 100644 --- a/hw/nvme/ctrl.c +++ b/hw/nvme/ctrl.c @@ -1333,8 +1333,12 @@ static inline void nvme_blk_write(BlockBackend *blk, int64_t offset, static void nvme_update_cq_head(NvmeCQueue *cq) { - pci_dma_read(&cq->ctrl->parent_obj, cq->db_addr, &cq->head, - sizeof(cq->head)); + uint32_t v; + + pci_dma_read(&cq->ctrl->parent_obj, cq->db_addr, &v, sizeof(v)); + + cq->head = le32_to_cpu(v); + trace_pci_nvme_shadow_doorbell_cq(cq->cqid, cq->head); } @@ -6141,15 +6145,21 @@ static uint16_t nvme_admin_cmd(NvmeCtrl *n, NvmeRequest *req) static void nvme_update_sq_eventidx(const NvmeSQueue *sq) { - pci_dma_write(&sq->ctrl->parent_obj, sq->ei_addr, &sq->tail, - sizeof(sq->tail)); + uint32_t v = cpu_to_le32(sq->tail); + + pci_dma_write(&sq->ctrl->parent_obj, sq->ei_addr, &v, sizeof(v)); + trace_pci_nvme_eventidx_sq(sq->sqid, sq->tail); } static void nvme_update_sq_tail(NvmeSQueue *sq) { - pci_dma_read(&sq->ctrl->parent_obj, sq->db_addr, &sq->tail, - sizeof(sq->tail)); + uint32_t v; + + pci_dma_read(&sq->ctrl->parent_obj, sq->db_addr, &v, sizeof(v)); + + sq->tail = le32_to_cpu(v); + trace_pci_nvme_shadow_doorbell_sq(sq->sqid, sq->tail); } From 4e98327e1480399beeb57fab618f2495b8ba2d2c Mon Sep 17 00:00:00 2001 From: Klaus Jensen Date: Thu, 8 Dec 2022 09:12:45 +0100 Subject: [PATCH 010/174] hw/nvme: fix missing cq eventidx update Prior to reading the shadow doorbell cq head, we have to update the eventidx. Otherwise, we risk that the driver will skip an mmio doorbell write. This happens on riscv64, as reported by Guenter. Adding the missing update to the cq eventidx fixes the issue. Fixes: 3f7fe8de3d49 ("hw/nvme: Implement shadow doorbell buffer support") Cc: qemu-stable@nongnu.org Cc: qemu-riscv@nongnu.org Reported-by: Guenter Roeck Reviewed-by: Keith Busch Signed-off-by: Klaus Jensen (cherry picked from commit fa5db2aa168bdc0f15c269b6212ef47632fab8ba) Signed-off-by: Michael Tokarev --- hw/nvme/ctrl.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c index 98d8e34109..1d3e058452 100644 --- a/hw/nvme/ctrl.c +++ b/hw/nvme/ctrl.c @@ -1331,6 +1331,15 @@ static inline void nvme_blk_write(BlockBackend *blk, int64_t offset, } } +static void nvme_update_cq_eventidx(const NvmeCQueue *cq) +{ + uint32_t v = cpu_to_le32(cq->head); + + //not in 7.2: trace_pci_nvme_update_cq_eventidx(cq->cqid, cq->head); + + pci_dma_write(PCI_DEVICE(cq->ctrl), cq->ei_addr, &v, sizeof(v)); +} + static void nvme_update_cq_head(NvmeCQueue *cq) { uint32_t v; @@ -1355,6 +1364,7 @@ static void nvme_post_cqes(void *opaque) hwaddr addr; if (n->dbbuf_enabled) { + nvme_update_cq_eventidx(cq); nvme_update_cq_head(cq); } From f549ee8c258cc599024cd38126da206352d18c7b Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Sat, 7 Jan 2023 14:32:41 +0100 Subject: [PATCH 011/174] configure: fix GLIB_VERSION for cross-compilation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit configure uses "pkg-config" directly so that GLIB_VERSION is always based on host glib version. To correctly handle cross-compilation it should use "$pkg_config" and take GLIB_VERSION from the cross-compiled glib. Reported-by: Валентин Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1414 Cc: qemu-stable@nongnu.org Signed-off-by: Paolo Bonzini (cherry picked from commit acedc9a660f83b362a1dec4b699e85d5dd82a067) Signed-off-by: Michael Tokarev --- configure | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure b/configure index 26c7bc5154..5f1828f1ec 100755 --- a/configure +++ b/configure @@ -2416,7 +2416,7 @@ echo "QEMU_OBJCFLAGS=$QEMU_OBJCFLAGS" >> $config_host_mak echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak echo "GLIB_LIBS=$glib_libs" >> $config_host_mak echo "GLIB_BINDIR=$glib_bindir" >> $config_host_mak -echo "GLIB_VERSION=$(pkg-config --modversion glib-2.0)" >> $config_host_mak +echo "GLIB_VERSION=$($pkg_config --modversion glib-2.0)" >> $config_host_mak echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak echo "EXESUF=$EXESUF" >> $config_host_mak From de605876ebda47fc56298576b13acbdfc55732fc Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Wed, 4 Jan 2023 11:00:56 -0800 Subject: [PATCH 012/174] target/arm: Fix sve_probe_page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Don't dereference CPUTLBEntryFull until we verify that the page is valid. Move the other user-only info field updates after the valid check to match. Cc: qemu-stable@nongnu.org Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1412 Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daudé Message-id: 20230104190056.305143-1-richard.henderson@linaro.org Signed-off-by: Peter Maydell (cherry picked from commit ce848378b999214777fa984a8a0a3e3deb1cf687) Signed-off-by: Michael Tokarev --- target/arm/sve_helper.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/target/arm/sve_helper.c b/target/arm/sve_helper.c index 1afeadf9c8..521fc9b969 100644 --- a/target/arm/sve_helper.c +++ b/target/arm/sve_helper.c @@ -5354,15 +5354,10 @@ bool sve_probe_page(SVEHostPage *info, bool nofault, CPUARMState *env, #ifdef CONFIG_USER_ONLY flags = probe_access_flags(env, addr, access_type, mmu_idx, nofault, &info->host, retaddr); - memset(&info->attrs, 0, sizeof(info->attrs)); - /* Require both ANON and MTE; see allocation_tag_mem(). */ - info->tagged = (flags & PAGE_ANON) && (flags & PAGE_MTE); #else CPUTLBEntryFull *full; flags = probe_access_full(env, addr, access_type, mmu_idx, nofault, &info->host, &full, retaddr); - info->attrs = full->attrs; - info->tagged = full->pte_attrs == 0xf0; #endif info->flags = flags; @@ -5371,6 +5366,15 @@ bool sve_probe_page(SVEHostPage *info, bool nofault, CPUARMState *env, return false; } +#ifdef CONFIG_USER_ONLY + memset(&info->attrs, 0, sizeof(info->attrs)); + /* Require both ANON and MTE; see allocation_tag_mem(). */ + info->tagged = (flags & PAGE_ANON) && (flags & PAGE_MTE); +#else + info->attrs = full->attrs; + info->tagged = full->pte_attrs == 0xf0; +#endif + /* Ensure that info->host[] is relative to addr, not addr + mem_off. */ info->host -= mem_off; return true; From c3ea5ef558f34cc0bf9f1e4208d43970acabfbef Mon Sep 17 00:00:00 2001 From: Evgeny Iakovlev Date: Thu, 5 Jan 2023 23:12:51 +0100 Subject: [PATCH 013/174] target/arm: allow writes to SCR_EL3.HXEn bit when FEAT_HCX is enabled ARM trusted firmware, when built with FEAT_HCX support, sets SCR_EL3.HXEn bit to allow EL2 to modify HCRX_EL2 register without trapping it in EL3. Qemu uses a valid mask to clear unsupported SCR_EL3 bits when emulating SCR_EL3 write, and that mask doesn't include SCR_EL3.HXEn bit even if FEAT_HCX is enabled and exposed to the guest. As a result EL3 writes of that bit are ignored. Cc: qemu-stable@nongnu.org Signed-off-by: Evgeny Iakovlev Message-id: 20230105221251.17896-4-eiakovlev@linux.microsoft.com Reviewed-by: Peter Maydell Signed-off-by: Peter Maydell (cherry picked from commit 08899b5c68a55a3780d707e2464073c8f2670d31) Signed-off-by: Michael Tokarev --- target/arm/helper.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/target/arm/helper.c b/target/arm/helper.c index d8c8223ec3..22bc935242 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -1820,6 +1820,9 @@ static void scr_write(CPUARMState *env, const ARMCPRegInfo *ri, uint64_t value) if (cpu_isar_feature(aa64_sme, cpu)) { valid_mask |= SCR_ENTP2; } + if (cpu_isar_feature(aa64_hcx, cpu)) { + valid_mask |= SCR_HXEN; + } } else { valid_mask &= ~(SCR_RW | SCR_ST); if (cpu_isar_feature(aa32_ras, cpu)) { From 75ecd0872ff264ebc84d64510e2eab6f951227ab Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Fri, 13 Jan 2023 19:46:05 -1000 Subject: [PATCH 014/174] target/arm: Fix in_debug path in S1_ptw_translate During the conversion, the test against get_phys_addr_lpae got inverted, meaning that successful translations went to the 'failed' label. Cc: qemu-stable@nongnu.org Fixes: f3639a64f60 ("target/arm: Use softmmu tlbs for page table walking") Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1417 Signed-off-by: Richard Henderson Message-id: 20230114054605.2977022-1-richard.henderson@linaro.org Reviewed-by: Peter Maydell Signed-off-by: Peter Maydell (cherry picked from commit 4a1103afb16efa64600ef0c2b03afe60f689fdc9) Signed-off-by: Michael Tokarev --- target/arm/ptw.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/target/arm/ptw.c b/target/arm/ptw.c index f812734bfb..bb22271a1d 100644 --- a/target/arm/ptw.c +++ b/target/arm/ptw.c @@ -238,8 +238,8 @@ static bool S1_ptw_translate(CPUARMState *env, S1Translate *ptw, }; GetPhysAddrResult s2 = { }; - if (!get_phys_addr_lpae(env, &s2ptw, addr, MMU_DATA_LOAD, - false, &s2, fi)) { + if (get_phys_addr_lpae(env, &s2ptw, addr, MMU_DATA_LOAD, + false, &s2, fi)) { goto fail; } ptw->out_phys = s2.f.phys_addr; From f759e330002777e9a4a7a3a600aad322733125fc Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Thu, 26 Jan 2023 13:31:34 -1000 Subject: [PATCH 015/174] target/arm: Fix physical address resolution for Stage2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Conversion to probe_access_full missed applying the page offset. Cc: qemu-stable@nongnu.org Reported-by: Sid Manning Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daudé Message-id: 20230126233134.103193-1-richard.henderson@linaro.org Fixes: f3639a64f602 ("target/arm: Use softmmu tlbs for page table walking") Signed-off-by: Richard Henderson Signed-off-by: Peter Maydell (cherry picked from commit 9d2617ac7d3139d870ba14204aedd74395990192) Signed-off-by: Michael Tokarev --- target/arm/ptw.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/arm/ptw.c b/target/arm/ptw.c index bb22271a1d..0b16068557 100644 --- a/target/arm/ptw.c +++ b/target/arm/ptw.c @@ -266,7 +266,7 @@ static bool S1_ptw_translate(CPUARMState *env, S1Translate *ptw, if (unlikely(flags & TLB_INVALID_MASK)) { goto fail; } - ptw->out_phys = full->phys_addr; + ptw->out_phys = full->phys_addr | (addr & ~TARGET_PAGE_MASK); ptw->out_rw = full->prot & PAGE_WRITE; pte_attrs = full->pte_attrs; pte_secure = full->attrs.secure; From ee2ec0ac52a315c8b4e9991b4523abd0c62d24d7 Mon Sep 17 00:00:00 2001 From: David Hildenbrand Date: Thu, 5 Jan 2023 13:45:25 +0100 Subject: [PATCH 016/174] migration/ram: Fix error handling in ram_write_tracking_start() If something goes wrong during uffd_change_protection(), we would miss to unregister uffd-wp and not release our reference. Fix it by performing the uffd_change_protection(true) last. Note that a uffd_change_protection(false) on the recovery path without a prior uffd_change_protection(false) is fine. Fixes: 278e2f551a09 ("migration: support UFFD write fault processing in ram_save_iterate()") Cc: qemu-stable@nongnu.org Reviewed-by: Peter Xu Reviewed-by: Juan Quintela Signed-off-by: David Hildenbrand Signed-off-by: Juan Quintela (cherry picked from commit 72ef3a370836aa07261ad7aaeea27ed5cbcee342) Signed-off-by: Michael Tokarev --- migration/ram.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/migration/ram.c b/migration/ram.c index 1338e47665..8062713c75 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -1885,13 +1885,14 @@ int ram_write_tracking_start(void) block->max_length, UFFDIO_REGISTER_MODE_WP, NULL)) { goto fail; } + block->flags |= RAM_UF_WRITEPROTECT; + memory_region_ref(block->mr); + /* Apply UFFD write protection to the block memory range */ if (uffd_change_protection(rs->uffdio_fd, block->host, block->max_length, true, false)) { goto fail; } - block->flags |= RAM_UF_WRITEPROTECT; - memory_region_ref(block->mr); trace_ram_write_tracking_ramblock_start(block->idstr, block->page_size, block->host, block->max_length); From eca533b60a44796143133eeb30fe61a8c9d429e9 Mon Sep 17 00:00:00 2001 From: David Hildenbrand Date: Thu, 5 Jan 2023 13:45:24 +0100 Subject: [PATCH 017/174] migration/ram: Fix populate_read_range() Unfortunately, commit f7b9dcfbcf44 broke populate_read_range(): the loop end condition is very wrong, resulting in that function not populating the full range. Lets' fix that. Fixes: f7b9dcfbcf44 ("migration/ram: Factor out populating pages readable in ram_block_populate_pages()") Cc: qemu-stable@nongnu.org Reviewed-by: Peter Xu Reviewed-by: Juan Quintela Signed-off-by: David Hildenbrand Signed-off-by: Juan Quintela (cherry picked from commit 5f19a4491941fdc5c5b50ce4ade6ffffe0f591b4) Signed-off-by: Michael Tokarev --- migration/ram.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/migration/ram.c b/migration/ram.c index 8062713c75..f25ebd9620 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -1765,13 +1765,15 @@ out: static inline void populate_read_range(RAMBlock *block, ram_addr_t offset, ram_addr_t size) { + const ram_addr_t end = offset + size; + /* * We read one byte of each page; this will preallocate page tables if * required and populate the shared zeropage on MAP_PRIVATE anonymous memory * where no page was populated yet. This might require adaption when * supporting other mappings, like shmem. */ - for (; offset < size; offset += block->page_size) { + for (; offset < end; offset += block->page_size) { char tmp = *((char *)block->host + offset); /* Don't optimize the read out */ From 6e0c9109046d4cec3d1c277f4bf54602c3fc1ba6 Mon Sep 17 00:00:00 2001 From: Kevin Wolf Date: Thu, 12 Jan 2023 20:14:51 +0100 Subject: [PATCH 018/174] qcow2: Fix theoretical corruption in store_bitmap() error path MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In order to write the bitmap table to the image file, it is converted to big endian. If the write fails, it is passed to clear_bitmap_table() to free all of the clusters it had allocated before. However, if we don't convert it back to native endianness first, we'll free things at a wrong offset. In practical terms, the offsets will be so high that we won't actually free any allocated clusters, but just run into an error, but in theory this can cause image corruption. Cc: qemu-stable@nongnu.org Signed-off-by: Kevin Wolf Message-Id: <20230112191454.169353-2-kwolf@redhat.com> Reviewed-by: Hanna Czenczek Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: Kevin Wolf (cherry picked from commit b03dd9613bcf8fe948581b2b3585510cb525c382) Signed-off-by: Michael Tokarev --- block/qcow2-bitmap.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/block/qcow2-bitmap.c b/block/qcow2-bitmap.c index bcad567c0c..3dff99ba06 100644 --- a/block/qcow2-bitmap.c +++ b/block/qcow2-bitmap.c @@ -115,7 +115,7 @@ static int update_header_sync(BlockDriverState *bs) return bdrv_flush(bs->file->bs); } -static inline void bitmap_table_to_be(uint64_t *bitmap_table, size_t size) +static inline void bitmap_table_bswap_be(uint64_t *bitmap_table, size_t size) { size_t i; @@ -1401,9 +1401,10 @@ static int store_bitmap(BlockDriverState *bs, Qcow2Bitmap *bm, Error **errp) goto fail; } - bitmap_table_to_be(tb, tb_size); + bitmap_table_bswap_be(tb, tb_size); ret = bdrv_pwrite(bs->file, tb_offset, tb_size * sizeof(tb[0]), tb, 0); if (ret < 0) { + bitmap_table_bswap_be(tb, tb_size); error_setg_errno(errp, -ret, "Failed to write bitmap '%s' to file", bm_name); goto fail; From 2c0fdb4ed3a122b29462880f4f4c28335d6935ff Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Tue, 7 Feb 2023 15:37:16 -0500 Subject: [PATCH 019/174] block: fix detect-zeroes= with BDRV_REQ_REGISTERED_BUF When a write request is converted into a write zeroes request by the detect-zeroes= feature, it is no longer associated with an I/O buffer. The BDRV_REQ_REGISTERED_BUF flag doesn't make sense without an I/O buffer and must be cleared because bdrv_co_do_pwrite_zeroes() fails with -EINVAL when it's set. Fiona Ebner bisected and diagnosed this QEMU 7.2 regression where writes containing zeroes to a blockdev with discard=unmap,detect-zeroes=unmap fail. Buglink: https://gitlab.com/qemu-project/qemu/-/issues/1404 Fixes: e8b6535533be ("block: add BDRV_REQ_REGISTERED_BUF request flag") Tested-by: Fiona Ebner Cc: qemu-stable@nongnu.org Reviewed-by: Eric Blake Reviewed-by: Hanna Czenczek Signed-off-by: Stefan Hajnoczi Message-Id: <20230207203719.242926-2-stefanha@redhat.com> (cherry picked from commit 3c5867156eb81c7c71611d078b2c5c2c863f884a) Signed-off-by: Michael Tokarev --- block/io.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/block/io.c b/block/io.c index b9424024f9..bbaa0d1b2d 100644 --- a/block/io.c +++ b/block/io.c @@ -2087,6 +2087,9 @@ static int coroutine_fn bdrv_aligned_pwritev(BdrvChild *child, if (bs->detect_zeroes == BLOCKDEV_DETECT_ZEROES_OPTIONS_UNMAP) { flags |= BDRV_REQ_MAY_UNMAP; } + + /* Can't use optimization hint with bufferless zero write */ + flags &= ~BDRV_REQ_REGISTERED_BUF; } if (ret < 0) { From 93ff84d4c0b78ece4dba688cf2d2db6e1a3945f4 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Sat, 14 Jan 2023 13:05:41 -1000 Subject: [PATCH 020/174] tests/tcg/i386: Introduce and use reg_t consistently MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Define reg_t based on the actual register width. Define the inlines using that type. This will allow input registers to 32-bit insns to be set to 64-bit values on x86-64, which allows testing various edge cases. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daudé Message-Id: <20230114230542.3116013-2-richard.henderson@linaro.org> Signed-off-by: Paolo Bonzini (cherry picked from commit 5d62d6649cd367b5b4a3676e7514d2f9ca86cb03) Signed-off-by: Michael Tokarev --- tests/tcg/i386/test-i386-bmi2.c | 182 ++++++++++++++++---------------- 1 file changed, 93 insertions(+), 89 deletions(-) diff --git a/tests/tcg/i386/test-i386-bmi2.c b/tests/tcg/i386/test-i386-bmi2.c index 5fadf47510..3c3ef85513 100644 --- a/tests/tcg/i386/test-i386-bmi2.c +++ b/tests/tcg/i386/test-i386-bmi2.c @@ -3,34 +3,40 @@ #include #include +#ifdef __x86_64 +typedef uint64_t reg_t; +#else +typedef uint32_t reg_t; +#endif + #define insn1q(name, arg0) \ -static inline uint64_t name##q(uint64_t arg0) \ +static inline reg_t name##q(reg_t arg0) \ { \ - uint64_t result64; \ + reg_t result64; \ asm volatile (#name "q %1, %0" : "=r"(result64) : "rm"(arg0)); \ return result64; \ } #define insn1l(name, arg0) \ -static inline uint32_t name##l(uint32_t arg0) \ +static inline reg_t name##l(reg_t arg0) \ { \ - uint32_t result32; \ + reg_t result32; \ asm volatile (#name "l %k1, %k0" : "=r"(result32) : "rm"(arg0)); \ return result32; \ } #define insn2q(name, arg0, c0, arg1, c1) \ -static inline uint64_t name##q(uint64_t arg0, uint64_t arg1) \ +static inline reg_t name##q(reg_t arg0, reg_t arg1) \ { \ - uint64_t result64; \ + reg_t result64; \ asm volatile (#name "q %2, %1, %0" : "=r"(result64) : c0(arg0), c1(arg1)); \ return result64; \ } #define insn2l(name, arg0, c0, arg1, c1) \ -static inline uint32_t name##l(uint32_t arg0, uint32_t arg1) \ +static inline reg_t name##l(reg_t arg0, reg_t arg1) \ { \ - uint32_t result32; \ + reg_t result32; \ asm volatile (#name "l %k2, %k1, %k0" : "=r"(result32) : c0(arg0), c1(arg1)); \ return result32; \ } @@ -65,130 +71,128 @@ insn1l(blsr, src) int main(int argc, char *argv[]) { uint64_t ehlo = 0x202020204f4c4845ull; uint64_t mask = 0xa080800302020001ull; - uint32_t result32; + reg_t result; #ifdef __x86_64 - uint64_t result64; - /* 64 bits */ - result64 = andnq(mask, ehlo); - assert(result64 == 0x002020204d4c4844); + result = andnq(mask, ehlo); + assert(result == 0x002020204d4c4844); - result64 = pextq(ehlo, mask); - assert(result64 == 133); + result = pextq(ehlo, mask); + assert(result == 133); - result64 = pdepq(result64, mask); - assert(result64 == (ehlo & mask)); + result = pdepq(result, mask); + assert(result == (ehlo & mask)); - result64 = pextq(-1ull, mask); - assert(result64 == 511); /* mask has 9 bits set */ + result = pextq(-1ull, mask); + assert(result == 511); /* mask has 9 bits set */ - result64 = pdepq(-1ull, mask); - assert(result64 == mask); + result = pdepq(-1ull, mask); + assert(result == mask); - result64 = bextrq(mask, 0x3f00); - assert(result64 == (mask & ~INT64_MIN)); + result = bextrq(mask, 0x3f00); + assert(result == (mask & ~INT64_MIN)); - result64 = bextrq(mask, 0x1038); - assert(result64 == 0xa0); + result = bextrq(mask, 0x1038); + assert(result == 0xa0); - result64 = bextrq(mask, 0x10f8); - assert(result64 == 0); + result = bextrq(mask, 0x10f8); + assert(result == 0); - result64 = blsiq(0x30); - assert(result64 == 0x10); + result = blsiq(0x30); + assert(result == 0x10); - result64 = blsiq(0x30ull << 32); - assert(result64 == 0x10ull << 32); + result = blsiq(0x30ull << 32); + assert(result == 0x10ull << 32); - result64 = blsmskq(0x30); - assert(result64 == 0x1f); + result = blsmskq(0x30); + assert(result == 0x1f); - result64 = blsrq(0x30); - assert(result64 == 0x20); + result = blsrq(0x30); + assert(result == 0x20); - result64 = blsrq(0x30ull << 32); - assert(result64 == 0x20ull << 32); + result = blsrq(0x30ull << 32); + assert(result == 0x20ull << 32); - result64 = bzhiq(mask, 0x3f); - assert(result64 == (mask & ~INT64_MIN)); + result = bzhiq(mask, 0x3f); + assert(result == (mask & ~INT64_MIN)); - result64 = bzhiq(mask, 0x1f); - assert(result64 == (mask & ~(-1 << 30))); + result = bzhiq(mask, 0x1f); + assert(result == (mask & ~(-1 << 30))); - result64 = rorxq(0x2132435465768798, 8); - assert(result64 == 0x9821324354657687); + result = rorxq(0x2132435465768798, 8); + assert(result == 0x9821324354657687); - result64 = sarxq(0xffeeddccbbaa9988, 8); - assert(result64 == 0xffffeeddccbbaa99); + result = sarxq(0xffeeddccbbaa9988, 8); + assert(result == 0xffffeeddccbbaa99); - result64 = sarxq(0x77eeddccbbaa9988, 8 | 64); - assert(result64 == 0x0077eeddccbbaa99); + result = sarxq(0x77eeddccbbaa9988, 8 | 64); + assert(result == 0x0077eeddccbbaa99); - result64 = shrxq(0xffeeddccbbaa9988, 8); - assert(result64 == 0x00ffeeddccbbaa99); + result = shrxq(0xffeeddccbbaa9988, 8); + assert(result == 0x00ffeeddccbbaa99); - result64 = shrxq(0x77eeddccbbaa9988, 8 | 192); - assert(result64 == 0x0077eeddccbbaa99); + result = shrxq(0x77eeddccbbaa9988, 8 | 192); + assert(result == 0x0077eeddccbbaa99); - result64 = shlxq(0xffeeddccbbaa9988, 8); - assert(result64 == 0xeeddccbbaa998800); + result = shlxq(0xffeeddccbbaa9988, 8); + assert(result == 0xeeddccbbaa998800); #endif /* 32 bits */ - result32 = andnl(mask, ehlo); - assert(result32 == 0x04d4c4844); + result = andnl(mask, ehlo); + assert(result == 0x04d4c4844); - result32 = pextl((uint32_t) ehlo, mask); - assert(result32 == 5); + result = pextl((uint32_t) ehlo, mask); + assert(result == 5); - result32 = pdepl(result32, mask); - assert(result32 == (uint32_t)(ehlo & mask)); + result = pdepl(result, mask); + assert(result == (uint32_t)(ehlo & mask)); - result32 = pextl(-1u, mask); - assert(result32 == 7); /* mask has 3 bits set */ + result = pextl(-1u, mask); + assert(result == 7); /* mask has 3 bits set */ - result32 = pdepl(-1u, mask); - assert(result32 == (uint32_t)mask); + result = pdepl(-1u, mask); + assert(result == (uint32_t)mask); - result32 = bextrl(mask, 0x1f00); - assert(result32 == (mask & ~INT32_MIN)); + result = bextrl(mask, 0x1f00); + assert(result == (mask & ~INT32_MIN)); - result32 = bextrl(ehlo, 0x1018); - assert(result32 == 0x4f); + result = bextrl(ehlo, 0x1018); + assert(result == 0x4f); - result32 = bextrl(mask, 0x1038); - assert(result32 == 0); + result = bextrl(mask, 0x1038); + assert(result == 0); - result32 = blsil(0xffff); - assert(result32 == 1); + result = blsil(0xffff); + assert(result == 1); - result32 = blsmskl(0x300); - assert(result32 == 0x1ff); + result = blsmskl(0x300); + assert(result == 0x1ff); - result32 = blsrl(0xffc); - assert(result32 == 0xff8); + result = blsrl(0xffc); + assert(result == 0xff8); - result32 = bzhil(mask, 0xf); - assert(result32 == 1); + result = bzhil(mask, 0xf); + assert(result == 1); - result32 = rorxl(0x65768798, 8); - assert(result32 == 0x98657687); + result = rorxl(0x65768798, 8); + assert(result == 0x98657687); - result32 = sarxl(0xffeeddcc, 8); - assert(result32 == 0xffffeedd); + result = sarxl(0xffeeddcc, 8); + assert(result == 0xffffeedd); - result32 = sarxl(0x77eeddcc, 8 | 32); - assert(result32 == 0x0077eedd); + result = sarxl(0x77eeddcc, 8 | 32); + assert(result == 0x0077eedd); - result32 = shrxl(0xffeeddcc, 8); - assert(result32 == 0x00ffeedd); + result = shrxl(0xffeeddcc, 8); + assert(result == 0x00ffeedd); - result32 = shrxl(0x77eeddcc, 8 | 128); - assert(result32 == 0x0077eedd); + result = shrxl(0x77eeddcc, 8 | 128); + assert(result == 0x0077eedd); - result32 = shlxl(0xffeeddcc, 8); - assert(result32 == 0xeeddcc00); + result = shlxl(0xffeeddcc, 8); + assert(result == 0xeeddcc00); return 0; } From 8d3c9fc4392cebe8cf19487d88ce1c68372b6a07 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Sat, 14 Jan 2023 13:05:42 -1000 Subject: [PATCH 021/174] target/i386: Fix BEXTR instruction There were two problems here: not limiting the input to operand bits, and not correctly handling large extraction length. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1372 Signed-off-by: Richard Henderson Message-Id: <20230114230542.3116013-3-richard.henderson@linaro.org> Cc: qemu-stable@nongnu.org Fixes: 1d0b926150e5 ("target/i386: move scalar 0F 38 and 0F 3A instruction to new decoder", 2022-10-18) Signed-off-by: Paolo Bonzini (cherry picked from commit b14c0098975264ed03144f145bca0179a6763a07) Signed-off-by: Michael Tokarev --- target/i386/tcg/emit.c.inc | 22 +++++++++++----------- tests/tcg/i386/test-i386-bmi2.c | 12 ++++++++++++ 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/target/i386/tcg/emit.c.inc b/target/i386/tcg/emit.c.inc index 7037ff91c6..99f6ba6e19 100644 --- a/target/i386/tcg/emit.c.inc +++ b/target/i386/tcg/emit.c.inc @@ -1078,30 +1078,30 @@ static void gen_ANDN(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode) static void gen_BEXTR(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode) { MemOp ot = decode->op[0].ot; - TCGv bound, zero; + TCGv bound = tcg_constant_tl(ot == MO_64 ? 63 : 31); + TCGv zero = tcg_constant_tl(0); + TCGv mone = tcg_constant_tl(-1); /* * Extract START, and shift the operand. * Shifts larger than operand size get zeros. */ tcg_gen_ext8u_tl(s->A0, s->T1); + if (TARGET_LONG_BITS == 64 && ot == MO_32) { + tcg_gen_ext32u_tl(s->T0, s->T0); + } tcg_gen_shr_tl(s->T0, s->T0, s->A0); - bound = tcg_constant_tl(ot == MO_64 ? 63 : 31); - zero = tcg_constant_tl(0); tcg_gen_movcond_tl(TCG_COND_LEU, s->T0, s->A0, bound, s->T0, zero); /* - * Extract the LEN into a mask. Lengths larger than - * operand size get all ones. + * Extract the LEN into an inverse mask. Lengths larger than + * operand size get all zeros, length 0 gets all ones. */ tcg_gen_extract_tl(s->A0, s->T1, 8, 8); - tcg_gen_movcond_tl(TCG_COND_LEU, s->A0, s->A0, bound, s->A0, bound); - - tcg_gen_movi_tl(s->T1, 1); - tcg_gen_shl_tl(s->T1, s->T1, s->A0); - tcg_gen_subi_tl(s->T1, s->T1, 1); - tcg_gen_and_tl(s->T0, s->T0, s->T1); + tcg_gen_shl_tl(s->T1, mone, s->A0); + tcg_gen_movcond_tl(TCG_COND_LEU, s->T1, s->A0, bound, s->T1, zero); + tcg_gen_andc_tl(s->T0, s->T0, s->T1); gen_op_update1_cc(s); set_cc_op(s, CC_OP_LOGICB + ot); diff --git a/tests/tcg/i386/test-i386-bmi2.c b/tests/tcg/i386/test-i386-bmi2.c index 3c3ef85513..982d4abda4 100644 --- a/tests/tcg/i386/test-i386-bmi2.c +++ b/tests/tcg/i386/test-i386-bmi2.c @@ -99,6 +99,9 @@ int main(int argc, char *argv[]) { result = bextrq(mask, 0x10f8); assert(result == 0); + result = bextrq(0xfedcba9876543210ull, 0x7f00); + assert(result == 0xfedcba9876543210ull); + result = blsiq(0x30); assert(result == 0x10); @@ -164,6 +167,15 @@ int main(int argc, char *argv[]) { result = bextrl(mask, 0x1038); assert(result == 0); + result = bextrl((reg_t)0x8f635a775ad3b9b4ull, 0x3018); + assert(result == 0x5a); + + result = bextrl((reg_t)0xfedcba9876543210ull, 0x7f00); + assert(result == 0x76543210u); + + result = bextrl(-1, 0); + assert(result == 0); + result = blsil(0xffff); assert(result == 1); From 6809dbc5c52f66d2d2ff9030a3d739e50ef3d9c8 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Sat, 14 Jan 2023 08:06:01 -1000 Subject: [PATCH 022/174] target/i386: Fix C flag for BLSI, BLSMSK, BLSR We forgot to set cc_src, which is used for computing C. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1370 Signed-off-by: Richard Henderson Message-Id: <20230114180601.2993644-1-richard.henderson@linaro.org> Cc: qemu-stable@nongnu.org Fixes: 1d0b926150e5 ("target/i386: move scalar 0F 38 and 0F 3A instruction to new decoder", 2022-10-18) Signed-off-by: Paolo Bonzini (cherry picked from commit 99282098dc74c2055bde5652bde6cf0067d0c370) Signed-off-by: Michael Tokarev --- target/i386/tcg/emit.c.inc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/target/i386/tcg/emit.c.inc b/target/i386/tcg/emit.c.inc index 99f6ba6e19..4d7702c106 100644 --- a/target/i386/tcg/emit.c.inc +++ b/target/i386/tcg/emit.c.inc @@ -1111,6 +1111,7 @@ static void gen_BLSI(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode) { MemOp ot = decode->op[0].ot; + tcg_gen_mov_tl(cpu_cc_src, s->T0); tcg_gen_neg_tl(s->T1, s->T0); tcg_gen_and_tl(s->T0, s->T0, s->T1); tcg_gen_mov_tl(cpu_cc_dst, s->T0); @@ -1121,6 +1122,7 @@ static void gen_BLSMSK(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode { MemOp ot = decode->op[0].ot; + tcg_gen_mov_tl(cpu_cc_src, s->T0); tcg_gen_subi_tl(s->T1, s->T0, 1); tcg_gen_xor_tl(s->T0, s->T0, s->T1); tcg_gen_mov_tl(cpu_cc_dst, s->T0); @@ -1131,6 +1133,7 @@ static void gen_BLSR(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode) { MemOp ot = decode->op[0].ot; + tcg_gen_mov_tl(cpu_cc_src, s->T0); tcg_gen_subi_tl(s->T1, s->T0, 1); tcg_gen_and_tl(s->T0, s->T0, s->T1); tcg_gen_mov_tl(cpu_cc_dst, s->T0); From c45d10f6557b4fdae3e97f1326429bb85f5a8717 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Tue, 31 Jan 2023 09:48:03 +0100 Subject: [PATCH 023/174] target/i386: fix ADOX followed by ADCX When ADCX is followed by ADOX or vice versa, the second instruction's carry comes from EFLAGS and the condition codes use the CC_OP_ADCOX operation. Retrieving the carry from EFLAGS is handled by this bit of gen_ADCOX: tcg_gen_extract_tl(carry_in, cpu_cc_src, ctz32(cc_op == CC_OP_ADCX ? CC_C : CC_O), 1); Unfortunately, in this case cc_op has been overwritten by the previous "if" statement to CC_OP_ADCOX. This works by chance when the first instruction is ADCX; however, if the first instruction is ADOX, ADCX will incorrectly take its carry from OF instead of CF. Fix by moving the computation of the new cc_op at the end of the function. The included exhaustive test case fails without this patch and passes afterwards. Because ADCX/ADOX need not be invoked through the VEX prefix, this regression bisects to commit 16fc5726a6e2 ("target/i386: reimplement 0x0f 0x38, add AVX", 2022-10-18). However, the mistake happened a little earlier, when BMI instructions were rewritten using the new decoder framework. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1471 Reported-by: Paul Jolly Fixes: 1d0b926150e5 ("target/i386: move scalar 0F 38 and 0F 3A instruction to new decoder", 2022-10-18) Cc: qemu-stable@nongnu.org Signed-off-by: Paolo Bonzini (cherry picked from commit 60c7dd22e1383754d5f150bc9f7c2785c662a7b6) Signed-off-by: Michael Tokarev --- target/i386/tcg/emit.c.inc | 20 +++++---- tests/tcg/i386/Makefile.target | 6 ++- tests/tcg/i386/test-i386-adcox.c | 75 ++++++++++++++++++++++++++++++++ 3 files changed, 91 insertions(+), 10 deletions(-) create mode 100644 tests/tcg/i386/test-i386-adcox.c diff --git a/target/i386/tcg/emit.c.inc b/target/i386/tcg/emit.c.inc index 4d7702c106..0d7c6e80ae 100644 --- a/target/i386/tcg/emit.c.inc +++ b/target/i386/tcg/emit.c.inc @@ -1015,6 +1015,7 @@ VSIB_AVX(VPGATHERQ, vpgatherq) static void gen_ADCOX(DisasContext *s, CPUX86State *env, MemOp ot, int cc_op) { + int opposite_cc_op; TCGv carry_in = NULL; TCGv carry_out = (cc_op == CC_OP_ADCX ? cpu_cc_dst : cpu_cc_src2); TCGv zero; @@ -1022,14 +1023,8 @@ static void gen_ADCOX(DisasContext *s, CPUX86State *env, MemOp ot, int cc_op) if (cc_op == s->cc_op || s->cc_op == CC_OP_ADCOX) { /* Re-use the carry-out from a previous round. */ carry_in = carry_out; - cc_op = s->cc_op; - } else if (s->cc_op == CC_OP_ADCX || s->cc_op == CC_OP_ADOX) { - /* Merge with the carry-out from the opposite instruction. */ - cc_op = CC_OP_ADCOX; - } - - /* If we don't have a carry-in, get it out of EFLAGS. */ - if (!carry_in) { + } else { + /* We don't have a carry-in, get it out of EFLAGS. */ if (s->cc_op != CC_OP_ADCX && s->cc_op != CC_OP_ADOX) { gen_compute_eflags(s); } @@ -1053,7 +1048,14 @@ static void gen_ADCOX(DisasContext *s, CPUX86State *env, MemOp ot, int cc_op) tcg_gen_add2_tl(s->T0, carry_out, s->T0, carry_out, s->T1, zero); break; } - set_cc_op(s, cc_op); + + opposite_cc_op = cc_op == CC_OP_ADCX ? CC_OP_ADOX : CC_OP_ADCX; + if (s->cc_op == CC_OP_ADCOX || s->cc_op == opposite_cc_op) { + /* Merge with the carry-out from the opposite instruction. */ + set_cc_op(s, CC_OP_ADCOX); + } else { + set_cc_op(s, cc_op); + } } static void gen_ADCX(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode) diff --git a/tests/tcg/i386/Makefile.target b/tests/tcg/i386/Makefile.target index 81831cafbc..bafd8c2180 100644 --- a/tests/tcg/i386/Makefile.target +++ b/tests/tcg/i386/Makefile.target @@ -14,7 +14,7 @@ config-cc.mak: Makefile I386_SRCS=$(notdir $(wildcard $(I386_SRC)/*.c)) ALL_X86_TESTS=$(I386_SRCS:.c=) SKIP_I386_TESTS=test-i386-ssse3 test-avx test-3dnow test-mmx -X86_64_TESTS:=$(filter test-i386-bmi2 $(SKIP_I386_TESTS), $(ALL_X86_TESTS)) +X86_64_TESTS:=$(filter test-i386-adcox test-i386-bmi2 $(SKIP_I386_TESTS), $(ALL_X86_TESTS)) test-i386-sse-exceptions: CFLAGS += -msse4.1 -mfpmath=sse run-test-i386-sse-exceptions: QEMU_OPTS += -cpu max @@ -28,6 +28,10 @@ test-i386-bmi2: CFLAGS=-O2 run-test-i386-bmi2: QEMU_OPTS += -cpu max run-plugin-test-i386-bmi2-%: QEMU_OPTS += -cpu max +test-i386-adcox: CFLAGS=-O2 +run-test-i386-adcox: QEMU_OPTS += -cpu max +run-plugin-test-i386-adcox-%: QEMU_OPTS += -cpu max + # # hello-i386 is a barebones app # diff --git a/tests/tcg/i386/test-i386-adcox.c b/tests/tcg/i386/test-i386-adcox.c new file mode 100644 index 0000000000..16169efff8 --- /dev/null +++ b/tests/tcg/i386/test-i386-adcox.c @@ -0,0 +1,75 @@ +/* See if various BMI2 instructions give expected results */ +#include +#include +#include + +#define CC_C 1 +#define CC_O (1 << 11) + +#ifdef __x86_64__ +#define REG uint64_t +#else +#define REG uint32_t +#endif + +void test_adox_adcx(uint32_t in_c, uint32_t in_o, REG adcx_operand, REG adox_operand) +{ + REG flags; + REG out_adcx, out_adox; + + asm("pushf; pop %0" : "=r"(flags)); + flags &= ~(CC_C | CC_O); + flags |= (in_c ? CC_C : 0); + flags |= (in_o ? CC_O : 0); + + out_adcx = adcx_operand; + out_adox = adox_operand; + asm("push %0; popf;" + "adox %3, %2;" + "adcx %3, %1;" + "pushf; pop %0" + : "+r" (flags), "+r" (out_adcx), "+r" (out_adox) + : "r" ((REG)-1), "0" (flags), "1" (out_adcx), "2" (out_adox)); + + assert(out_adcx == in_c + adcx_operand - 1); + assert(out_adox == in_o + adox_operand - 1); + assert(!!(flags & CC_C) == (in_c || adcx_operand)); + assert(!!(flags & CC_O) == (in_o || adox_operand)); +} + +void test_adcx_adox(uint32_t in_c, uint32_t in_o, REG adcx_operand, REG adox_operand) +{ + REG flags; + REG out_adcx, out_adox; + + asm("pushf; pop %0" : "=r"(flags)); + flags &= ~(CC_C | CC_O); + flags |= (in_c ? CC_C : 0); + flags |= (in_o ? CC_O : 0); + + out_adcx = adcx_operand; + out_adox = adox_operand; + asm("push %0; popf;" + "adcx %3, %1;" + "adox %3, %2;" + "pushf; pop %0" + : "+r" (flags), "+r" (out_adcx), "+r" (out_adox) + : "r" ((REG)-1), "0" (flags), "1" (out_adcx), "2" (out_adox)); + + assert(out_adcx == in_c + adcx_operand - 1); + assert(out_adox == in_o + adox_operand - 1); + assert(!!(flags & CC_C) == (in_c || adcx_operand)); + assert(!!(flags & CC_O) == (in_o || adox_operand)); +} + +int main(int argc, char *argv[]) { + /* try all combinations of input CF, input OF, CF from op1+op2, OF from op2+op1 */ + int i; + for (i = 0; i <= 15; i++) { + printf("%d\n", i); + test_adcx_adox(!!(i & 1), !!(i & 2), !!(i & 4), !!(i & 8)); + test_adox_adcx(!!(i & 1), !!(i & 2), !!(i & 4), !!(i & 8)); + } + return 0; +} + From f163cf6be4b7b51f7327d264ea2572f8b495d287 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Sat, 14 Jan 2023 13:32:06 -1000 Subject: [PATCH 024/174] target/i386: Fix BZHI instruction We did not correctly handle N >= operand size. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1374 Signed-off-by: Richard Henderson Message-Id: <20230114233206.3118472-1-richard.henderson@linaro.org> Signed-off-by: Paolo Bonzini (cherry picked from commit 9ad2ba6e8e7fc195d0dd0b76ab38bd2fceb1bdd4) Signed-off-by: Michael Tokarev --- target/i386/tcg/emit.c.inc | 14 +++++++------- tests/tcg/i386/test-i386-bmi2.c | 3 +++ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/target/i386/tcg/emit.c.inc b/target/i386/tcg/emit.c.inc index 0d7c6e80ae..7296f3952c 100644 --- a/target/i386/tcg/emit.c.inc +++ b/target/i386/tcg/emit.c.inc @@ -1145,20 +1145,20 @@ static void gen_BLSR(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode) static void gen_BZHI(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode) { MemOp ot = decode->op[0].ot; - TCGv bound; + TCGv bound = tcg_constant_tl(ot == MO_64 ? 63 : 31); + TCGv zero = tcg_constant_tl(0); + TCGv mone = tcg_constant_tl(-1); - tcg_gen_ext8u_tl(s->T1, cpu_regs[s->vex_v]); - bound = tcg_constant_tl(ot == MO_64 ? 63 : 31); + tcg_gen_ext8u_tl(s->T1, s->T1); /* * Note that since we're using BMILG (in order to get O * cleared) we need to store the inverse into C. */ - tcg_gen_setcond_tl(TCG_COND_LT, cpu_cc_src, s->T1, bound); - tcg_gen_movcond_tl(TCG_COND_GT, s->T1, s->T1, bound, bound, s->T1); + tcg_gen_setcond_tl(TCG_COND_LEU, cpu_cc_src, s->T1, bound); - tcg_gen_movi_tl(s->A0, -1); - tcg_gen_shl_tl(s->A0, s->A0, s->T1); + tcg_gen_shl_tl(s->A0, mone, s->T1); + tcg_gen_movcond_tl(TCG_COND_LEU, s->A0, s->T1, bound, s->A0, zero); tcg_gen_andc_tl(s->T0, s->T0, s->A0); gen_op_update1_cc(s); diff --git a/tests/tcg/i386/test-i386-bmi2.c b/tests/tcg/i386/test-i386-bmi2.c index 982d4abda4..0244df7987 100644 --- a/tests/tcg/i386/test-i386-bmi2.c +++ b/tests/tcg/i386/test-i386-bmi2.c @@ -123,6 +123,9 @@ int main(int argc, char *argv[]) { result = bzhiq(mask, 0x1f); assert(result == (mask & ~(-1 << 30))); + result = bzhiq(mask, 0x40); + assert(result == mask); + result = rorxq(0x2132435465768798, 8); assert(result == 0x9821324354657687); From 856a67cadea901221c69fb4251c038389a5d4571 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Tue, 10 Jan 2023 17:36:33 +0100 Subject: [PATCH 025/174] block/iscsi: fix double-free on BUSY or similar statuses Commit 8c460269aa77 ("iscsi: base all handling of check condition on scsi_sense_to_errno", 2019-07-15) removed a "goto out" so that the same coroutine is re-entered twice; once from iscsi_co_generic_cb, once from the timer callback iscsi_retry_timer_expired. This can cause a crash. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1378 Reported-by: Grzegorz Zdanowski Signed-off-by: Paolo Bonzini (cherry picked from commit 5080152e2ef6cde7aa692e29880c62bd54acb750) Signed-off-by: Michael Tokarev --- block/iscsi.c | 1 + 1 file changed, 1 insertion(+) diff --git a/block/iscsi.c b/block/iscsi.c index a316d46d96..1bba42a71b 100644 --- a/block/iscsi.c +++ b/block/iscsi.c @@ -268,6 +268,7 @@ iscsi_co_generic_cb(struct iscsi_context *iscsi, int status, timer_mod(&iTask->retry_timer, qemu_clock_get_ms(QEMU_CLOCK_REALTIME) + retry_time); iTask->do_retry = 1; + return; } else if (status == SCSI_STATUS_CHECK_CONDITION) { int error = iscsi_translate_sense(&task->sense); if (error == EAGAIN) { From 1ca37b7ef63bbc929d7b10a4c62d65b2268c7548 Mon Sep 17 00:00:00 2001 From: Julia Suvorova Date: Thu, 23 Feb 2023 13:57:47 +0100 Subject: [PATCH 026/174] hw/smbios: fix field corruption in type 4 table Since table type 4 of SMBIOS version 2.6 is shorter than 3.0, the strings which follow immediately after the struct fields have been overwritten by unconditional filling of later fields such as core_count2. Make these fields dependent on the SMBIOS version. Fixes: 05e27d74c7 ("hw/smbios: add core_count2 to smbios table type 4") Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2169904 Signed-off-by: Julia Suvorova Message-Id: <20230223125747.254914-1-jusual@redhat.com> Reviewed-by: Igor Mammedov Reviewed-by: Ani Sinha Reviewed-by: Igor Mammedov Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin (cherry picked from commit 60d09b8dc7dd4256d664ad680795cb1327805b2b) Signed-off-by: Michael Tokarev --- hw/smbios/smbios.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/hw/smbios/smbios.c b/hw/smbios/smbios.c index b4243de735..66a020999b 100644 --- a/hw/smbios/smbios.c +++ b/hw/smbios/smbios.c @@ -749,14 +749,16 @@ static void smbios_build_type_4_table(MachineState *ms, unsigned instance) t->core_count = (ms->smp.cores > 255) ? 0xFF : ms->smp.cores; t->core_enabled = t->core_count; - t->core_count2 = t->core_enabled2 = cpu_to_le16(ms->smp.cores); - t->thread_count = (ms->smp.threads > 255) ? 0xFF : ms->smp.threads; - t->thread_count2 = cpu_to_le16(ms->smp.threads); t->processor_characteristics = cpu_to_le16(0x02); /* Unknown */ t->processor_family2 = cpu_to_le16(0x01); /* Other */ + if (tbl_len == SMBIOS_TYPE_4_LEN_V30) { + t->core_count2 = t->core_enabled2 = cpu_to_le16(ms->smp.cores); + t->thread_count2 = cpu_to_le16(ms->smp.threads); + } + SMBIOS_BUILD_TABLE_POST; smbios_type4_count++; } From 538c8180c31bd18692bc7aae970e3c646d327477 Mon Sep 17 00:00:00 2001 From: "Michael S. Tsirkin" Date: Wed, 8 Feb 2023 15:55:38 -0500 Subject: [PATCH 027/174] Revert "x86: do not re-randomize RNG seed on snapshot load" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 14b29fea742034186403914b4d013d0e83f19e78. Signed-off-by: Michael S. Tsirkin Fixes: 14b29fea74 ("x86: do not re-randomize RNG seed on snapshot load") Tested-by: Nathan Chancellor Tested-by: Dov Murik Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Reviewed-by: Daniel P. Berrangé (cherry picked from commit ef82d893de6d5bc0023026e636eae0f9a3e319dd) Signed-off-by: Michael Tokarev --- hw/i386/x86.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/i386/x86.c b/hw/i386/x86.c index 78cc131926..7984f65352 100644 --- a/hw/i386/x86.c +++ b/hw/i386/x86.c @@ -1115,7 +1115,7 @@ void x86_load_linux(X86MachineState *x86ms, setup_data->type = cpu_to_le32(SETUP_RNG_SEED); setup_data->len = cpu_to_le32(RNG_SEED_LENGTH); qemu_guest_getrandom_nofail(setup_data->data, RNG_SEED_LENGTH); - qemu_register_reset_nosnapshotload(reset_rng_seed, setup_data); + qemu_register_reset(reset_rng_seed, setup_data); fw_cfg_add_bytes_callback(fw_cfg, FW_CFG_KERNEL_DATA, reset_rng_seed, NULL, setup_data, kernel, kernel_size, true); } else { From 851de2751fa9b60a57d16367b9f20178bb32cc79 Mon Sep 17 00:00:00 2001 From: "Michael S. Tsirkin" Date: Wed, 8 Feb 2023 15:55:39 -0500 Subject: [PATCH 028/174] Revert "x86: re-initialize RNG seed when selecting kernel" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit cc63374a5a7c240b7d3be734ef589dabbefc7527. Fixes: cc63374a5a ("x86: re-initialize RNG seed when selecting kernel") Signed-off-by: Michael S. Tsirkin Tested-by: Nathan Chancellor Tested-by: Dov Murik Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Reviewed-by: Daniel P. Berrangé (cherry picked from commit b4bfa0a31d86caf89223e10e701c5b00df369b37) Signed-off-by: Michael Tokarev --- hw/i386/x86.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/hw/i386/x86.c b/hw/i386/x86.c index 7984f65352..e1a5f244a9 100644 --- a/hw/i386/x86.c +++ b/hw/i386/x86.c @@ -1116,14 +1116,11 @@ void x86_load_linux(X86MachineState *x86ms, setup_data->len = cpu_to_le32(RNG_SEED_LENGTH); qemu_guest_getrandom_nofail(setup_data->data, RNG_SEED_LENGTH); qemu_register_reset(reset_rng_seed, setup_data); - fw_cfg_add_bytes_callback(fw_cfg, FW_CFG_KERNEL_DATA, reset_rng_seed, NULL, - setup_data, kernel, kernel_size, true); - } else { - fw_cfg_add_bytes(fw_cfg, FW_CFG_KERNEL_DATA, kernel, kernel_size); } fw_cfg_add_i32(fw_cfg, FW_CFG_KERNEL_ADDR, prot_addr); fw_cfg_add_i32(fw_cfg, FW_CFG_KERNEL_SIZE, kernel_size); + fw_cfg_add_bytes(fw_cfg, FW_CFG_KERNEL_DATA, kernel, kernel_size); sev_load_ctx.kernel_data = (char *)kernel; sev_load_ctx.kernel_size = kernel_size; From 8faaaf1bcdd1864ee2000135217ea8fc1e293347 Mon Sep 17 00:00:00 2001 From: "Michael S. Tsirkin" Date: Wed, 8 Feb 2023 15:55:40 -0500 Subject: [PATCH 029/174] Revert "x86: reinitialize RNG seed on system reboot" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 763a2828bf313ed55878b09759dc435355035f2e. Fixes: 763a2828bf ("x86: reinitialize RNG seed on system reboot") Signed-off-by: Michael S. Tsirkin Tested-by: Nathan Chancellor Tested-by: Dov Murik Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Reviewed-by: Daniel P. Berrangé (cherry picked from commit fdc27ced04160904af1f290b561eded73abb8f1d) Signed-off-by: Michael Tokarev --- hw/i386/x86.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/hw/i386/x86.c b/hw/i386/x86.c index e1a5f244a9..32f37ab7c2 100644 --- a/hw/i386/x86.c +++ b/hw/i386/x86.c @@ -787,12 +787,6 @@ static void reset_setup_data(void *opaque) stq_p(fixup->pos, fixup->orig_val); } -static void reset_rng_seed(void *opaque) -{ - SetupData *setup_data = opaque; - qemu_guest_getrandom_nofail(setup_data->data, le32_to_cpu(setup_data->len)); -} - void x86_load_linux(X86MachineState *x86ms, FWCfgState *fw_cfg, int acpi_data_size, @@ -1115,7 +1109,6 @@ void x86_load_linux(X86MachineState *x86ms, setup_data->type = cpu_to_le32(SETUP_RNG_SEED); setup_data->len = cpu_to_le32(RNG_SEED_LENGTH); qemu_guest_getrandom_nofail(setup_data->data, RNG_SEED_LENGTH); - qemu_register_reset(reset_rng_seed, setup_data); } fw_cfg_add_i32(fw_cfg, FW_CFG_KERNEL_ADDR, prot_addr); From 814c0b185dbc55fe73d1887aac791b25f4e499d4 Mon Sep 17 00:00:00 2001 From: "Michael S. Tsirkin" Date: Wed, 8 Feb 2023 15:55:41 -0500 Subject: [PATCH 030/174] Revert "x86: use typedef for SetupData struct" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit eebb38a5633a77f5fa79d6486d5b2fcf8fbe3c07. Fixes: eebb38a563 ("x86: use typedef for SetupData struct") Signed-off-by: Michael S. Tsirkin Tested-by: Nathan Chancellor Tested-by: Dov Murik Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Reviewed-by: Daniel P. Berrangé (cherry picked from commit ea96a784773259d469f3f2465f09e04eabb80a66) Signed-off-by: Michael Tokarev --- hw/i386/x86.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/hw/i386/x86.c b/hw/i386/x86.c index 32f37ab7c2..76b12108b4 100644 --- a/hw/i386/x86.c +++ b/hw/i386/x86.c @@ -657,12 +657,12 @@ DeviceState *ioapic_init_secondary(GSIState *gsi_state) return dev; } -typedef struct SetupData { +struct setup_data { uint64_t next; uint32_t type; uint32_t len; uint8_t data[]; -} __attribute__((packed)) SetupData; +} __attribute__((packed)); /* @@ -803,7 +803,7 @@ void x86_load_linux(X86MachineState *x86ms, FILE *f; char *vmode; MachineState *machine = MACHINE(x86ms); - SetupData *setup_data; + struct setup_data *setup_data; const char *kernel_filename = machine->kernel_filename; const char *initrd_filename = machine->initrd_filename; const char *dtb_filename = machine->dtb; @@ -1086,11 +1086,11 @@ void x86_load_linux(X86MachineState *x86ms, } setup_data_offset = QEMU_ALIGN_UP(kernel_size, 16); - kernel_size = setup_data_offset + sizeof(SetupData) + dtb_size; + kernel_size = setup_data_offset + sizeof(struct setup_data) + dtb_size; kernel = g_realloc(kernel, kernel_size); - setup_data = (SetupData *)(kernel + setup_data_offset); + setup_data = (struct setup_data *)(kernel + setup_data_offset); setup_data->next = cpu_to_le64(first_setup_data); first_setup_data = prot_addr + setup_data_offset; setup_data->type = cpu_to_le32(SETUP_DTB); @@ -1101,9 +1101,9 @@ void x86_load_linux(X86MachineState *x86ms, if (!legacy_no_rng_seed) { setup_data_offset = QEMU_ALIGN_UP(kernel_size, 16); - kernel_size = setup_data_offset + sizeof(SetupData) + RNG_SEED_LENGTH; + kernel_size = setup_data_offset + sizeof(struct setup_data) + RNG_SEED_LENGTH; kernel = g_realloc(kernel, kernel_size); - setup_data = (SetupData *)(kernel + setup_data_offset); + setup_data = (struct setup_data *)(kernel + setup_data_offset); setup_data->next = cpu_to_le64(first_setup_data); first_setup_data = prot_addr + setup_data_offset; setup_data->type = cpu_to_le32(SETUP_RNG_SEED); From 99fb11df6f69a10b8b1be0b3bc2bb08e6bbd84b6 Mon Sep 17 00:00:00 2001 From: "Michael S. Tsirkin" Date: Wed, 8 Feb 2023 16:04:40 -0500 Subject: [PATCH 031/174] Revert "x86: return modified setup_data only if read as memory, not as file" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit e935b735085dfa61d8e6d276b6f9e7687796a3c7. Fixes: e935b73508 ("x86: return modified setup_data only if read as memory, not as file") Signed-off-by: Michael S. Tsirkin Tested-by: Nathan Chancellor Tested-by: Dov Murik Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Reviewed-by: Daniel P. Berrangé (cherry picked from commit ae80d81cfa865cbe443543679e013e7fa5fcd12c) Signed-off-by: Michael Tokarev --- hw/i386/x86.c | 46 +++++++++------------------------------ hw/nvram/fw_cfg.c | 12 +++++----- include/hw/nvram/fw_cfg.h | 22 ------------------- 3 files changed, 16 insertions(+), 64 deletions(-) diff --git a/hw/i386/x86.c b/hw/i386/x86.c index 76b12108b4..4831193c86 100644 --- a/hw/i386/x86.c +++ b/hw/i386/x86.c @@ -37,7 +37,6 @@ #include "sysemu/whpx.h" #include "sysemu/numa.h" #include "sysemu/replay.h" -#include "sysemu/reset.h" #include "sysemu/sysemu.h" #include "sysemu/cpu-timers.h" #include "sysemu/xen.h" @@ -769,24 +768,6 @@ static bool load_elfboot(const char *kernel_filename, return true; } -typedef struct SetupDataFixup { - void *pos; - hwaddr orig_val, new_val; - uint32_t addr; -} SetupDataFixup; - -static void fixup_setup_data(void *opaque) -{ - SetupDataFixup *fixup = opaque; - stq_p(fixup->pos, fixup->new_val); -} - -static void reset_setup_data(void *opaque) -{ - SetupDataFixup *fixup = opaque; - stq_p(fixup->pos, fixup->orig_val); -} - void x86_load_linux(X86MachineState *x86ms, FWCfgState *fw_cfg, int acpi_data_size, @@ -1111,11 +1092,8 @@ void x86_load_linux(X86MachineState *x86ms, qemu_guest_getrandom_nofail(setup_data->data, RNG_SEED_LENGTH); } - fw_cfg_add_i32(fw_cfg, FW_CFG_KERNEL_ADDR, prot_addr); - fw_cfg_add_i32(fw_cfg, FW_CFG_KERNEL_SIZE, kernel_size); - fw_cfg_add_bytes(fw_cfg, FW_CFG_KERNEL_DATA, kernel, kernel_size); - sev_load_ctx.kernel_data = (char *)kernel; - sev_load_ctx.kernel_size = kernel_size; + /* Offset 0x250 is a pointer to the first setup_data link. */ + stq_p(header + 0x250, first_setup_data); /* * If we're starting an encrypted VM, it will be OVMF based, which uses the @@ -1125,20 +1103,16 @@ void x86_load_linux(X86MachineState *x86ms, * file the user passed in. */ if (!sev_enabled()) { - SetupDataFixup *fixup = g_malloc(sizeof(*fixup)); - memcpy(setup, header, MIN(sizeof(header), setup_size)); - /* Offset 0x250 is a pointer to the first setup_data link. */ - fixup->pos = setup + 0x250; - fixup->orig_val = ldq_p(fixup->pos); - fixup->new_val = first_setup_data; - fixup->addr = cpu_to_le32(real_addr); - fw_cfg_add_bytes_callback(fw_cfg, FW_CFG_SETUP_ADDR, fixup_setup_data, NULL, - fixup, &fixup->addr, sizeof(fixup->addr), true); - qemu_register_reset(reset_setup_data, fixup); - } else { - fw_cfg_add_i32(fw_cfg, FW_CFG_SETUP_ADDR, real_addr); } + + fw_cfg_add_i32(fw_cfg, FW_CFG_KERNEL_ADDR, prot_addr); + fw_cfg_add_i32(fw_cfg, FW_CFG_KERNEL_SIZE, kernel_size); + fw_cfg_add_bytes(fw_cfg, FW_CFG_KERNEL_DATA, kernel, kernel_size); + sev_load_ctx.kernel_data = (char *)kernel; + sev_load_ctx.kernel_size = kernel_size; + + fw_cfg_add_i32(fw_cfg, FW_CFG_SETUP_ADDR, real_addr); fw_cfg_add_i32(fw_cfg, FW_CFG_SETUP_SIZE, setup_size); fw_cfg_add_bytes(fw_cfg, FW_CFG_SETUP_DATA, setup, setup_size); sev_load_ctx.setup_data = (char *)setup; diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c index 6edf5ea3e9..371a45dfe2 100644 --- a/hw/nvram/fw_cfg.c +++ b/hw/nvram/fw_cfg.c @@ -693,12 +693,12 @@ static const VMStateDescription vmstate_fw_cfg = { } }; -void fw_cfg_add_bytes_callback(FWCfgState *s, uint16_t key, - FWCfgCallback select_cb, - FWCfgWriteCallback write_cb, - void *callback_opaque, - void *data, size_t len, - bool read_only) +static void fw_cfg_add_bytes_callback(FWCfgState *s, uint16_t key, + FWCfgCallback select_cb, + FWCfgWriteCallback write_cb, + void *callback_opaque, + void *data, size_t len, + bool read_only) { int arch = !!(key & FW_CFG_ARCH_LOCAL); diff --git a/include/hw/nvram/fw_cfg.h b/include/hw/nvram/fw_cfg.h index 2e503904dc..c1f81a5f13 100644 --- a/include/hw/nvram/fw_cfg.h +++ b/include/hw/nvram/fw_cfg.h @@ -117,28 +117,6 @@ struct FWCfgMemState { */ void fw_cfg_add_bytes(FWCfgState *s, uint16_t key, void *data, size_t len); -/** - * fw_cfg_add_bytes_callback: - * @s: fw_cfg device being modified - * @key: selector key value for new fw_cfg item - * @select_cb: callback function when selecting - * @write_cb: callback function after a write - * @callback_opaque: argument to be passed into callback function - * @data: pointer to start of item data - * @len: size of item data - * @read_only: is file read only - * - * Add a new fw_cfg item, available by selecting the given key, as a raw - * "blob" of the given size. The data referenced by the starting pointer - * is only linked, NOT copied, into the data structure of the fw_cfg device. - */ -void fw_cfg_add_bytes_callback(FWCfgState *s, uint16_t key, - FWCfgCallback select_cb, - FWCfgWriteCallback write_cb, - void *callback_opaque, - void *data, size_t len, - bool read_only); - /** * fw_cfg_add_string: * @s: fw_cfg device being modified From b3f36e52ac1d0fa47007c0b33dfd63c809afc7fd Mon Sep 17 00:00:00 2001 From: "Michael S. Tsirkin" Date: Wed, 8 Feb 2023 16:05:35 -0500 Subject: [PATCH 032/174] Revert "hw/i386: pass RNG seed via setup_data entry" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 67f7e426e53833a5db75b0d813e8d537b8a75bd2. Additionally to the automatic revert, I went over the code and dropped all mentions of legacy_no_rng_seed manually, effectively reverting a combination of 2 additional commits: commit ffe2d2382e5f1aae1abc4081af407905ef380311 Author: Jason A. Donenfeld Date: Wed Sep 21 11:31:34 2022 +0200 x86: re-enable rng seeding via SetupData commit 3824e25db1a84fadc50b88dfbe27047aa2f7f85d Author: Gerd Hoffmann Date: Wed Aug 17 10:39:40 2022 +0200 x86: disable rng seeding via setup_data Fixes: 67f7e426e5 ("hw/i386: pass RNG seed via setup_data entry") Signed-off-by: Michael S. Tsirkin Tested-by: Nathan Chancellor Tested-by: Dov Murik Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Reviewed-by: Daniel P. Berrangé (cherry picked from commit 167f4873580d3729565044cda73c3e20997950f2) Signed-off-by: Michael Tokarev Mjt: this required manual edit for stable-7.2 --- hw/i386/microvm.c | 2 +- hw/i386/pc.c | 4 ++-- hw/i386/pc_piix.c | 2 -- hw/i386/pc_q35.c | 2 -- hw/i386/x86.c | 26 ++++---------------------- include/hw/i386/pc.h | 3 --- include/hw/i386/x86.h | 3 +-- 7 files changed, 8 insertions(+), 34 deletions(-) diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index 170a331e3f..b231ceda9a 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -330,7 +330,7 @@ static void microvm_memory_init(MicrovmMachineState *mms) rom_set_fw(fw_cfg); if (machine->kernel_filename != NULL) { - x86_load_linux(x86ms, fw_cfg, 0, true, false); + x86_load_linux(x86ms, fw_cfg, 0, true); } if (mms->option_roms) { diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 546b703cb4..ec5a10534b 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -799,7 +799,7 @@ void xen_load_linux(PCMachineState *pcms) rom_set_fw(fw_cfg); x86_load_linux(x86ms, fw_cfg, pcmc->acpi_data_size, - pcmc->pvh_enabled, pcmc->legacy_no_rng_seed); + pcmc->pvh_enabled); for (i = 0; i < nb_option_roms; i++) { assert(!strcmp(option_rom[i].name, "linuxboot.bin") || !strcmp(option_rom[i].name, "linuxboot_dma.bin") || @@ -1119,7 +1119,7 @@ void pc_memory_init(PCMachineState *pcms, if (linux_boot) { x86_load_linux(x86ms, fw_cfg, pcmc->acpi_data_size, - pcmc->pvh_enabled, pcmc->legacy_no_rng_seed); + pcmc->pvh_enabled); } for (i = 0; i < nb_option_roms; i++) { diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c index 0ad0ed1603..24616bf924 100644 --- a/hw/i386/pc_piix.c +++ b/hw/i386/pc_piix.c @@ -449,11 +449,9 @@ DEFINE_I440FX_MACHINE(v7_2, "pc-i440fx-7.2", NULL, static void pc_i440fx_7_1_machine_options(MachineClass *m) { - PCMachineClass *pcmc = PC_MACHINE_CLASS(m); pc_i440fx_7_2_machine_options(m); m->alias = NULL; m->is_default = false; - pcmc->legacy_no_rng_seed = true; compat_props_add(m->compat_props, hw_compat_7_1, hw_compat_7_1_len); compat_props_add(m->compat_props, pc_compat_7_1, pc_compat_7_1_len); } diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c index a496bd6e74..f522874add 100644 --- a/hw/i386/pc_q35.c +++ b/hw/i386/pc_q35.c @@ -383,10 +383,8 @@ DEFINE_Q35_MACHINE(v7_2, "pc-q35-7.2", NULL, static void pc_q35_7_1_machine_options(MachineClass *m) { - PCMachineClass *pcmc = PC_MACHINE_CLASS(m); pc_q35_7_2_machine_options(m); m->alias = NULL; - pcmc->legacy_no_rng_seed = true; compat_props_add(m->compat_props, hw_compat_7_1, hw_compat_7_1_len); compat_props_add(m->compat_props, pc_compat_7_1, pc_compat_7_1_len); } diff --git a/hw/i386/x86.c b/hw/i386/x86.c index 4831193c86..80be3032cc 100644 --- a/hw/i386/x86.c +++ b/hw/i386/x86.c @@ -26,7 +26,6 @@ #include "qemu/cutils.h" #include "qemu/units.h" #include "qemu/datadir.h" -#include "qemu/guest-random.h" #include "qapi/error.h" #include "qapi/qmp/qerror.h" #include "qapi/qapi-visit-common.h" @@ -771,8 +770,7 @@ static bool load_elfboot(const char *kernel_filename, void x86_load_linux(X86MachineState *x86ms, FWCfgState *fw_cfg, int acpi_data_size, - bool pvh_enabled, - bool legacy_no_rng_seed) + bool pvh_enabled) { bool linuxboot_dma_enabled = X86_MACHINE_GET_CLASS(x86ms)->fwcfg_dma_enabled; uint16_t protocol; @@ -780,7 +778,7 @@ void x86_load_linux(X86MachineState *x86ms, int dtb_size, setup_data_offset; uint32_t initrd_max; uint8_t header[8192], *setup, *kernel; - hwaddr real_addr, prot_addr, cmdline_addr, initrd_addr = 0, first_setup_data = 0; + hwaddr real_addr, prot_addr, cmdline_addr, initrd_addr = 0; FILE *f; char *vmode; MachineState *machine = MACHINE(x86ms); @@ -790,7 +788,6 @@ void x86_load_linux(X86MachineState *x86ms, const char *dtb_filename = machine->dtb; const char *kernel_cmdline = machine->kernel_cmdline; SevKernelLoaderContext sev_load_ctx = {}; - enum { RNG_SEED_LENGTH = 32 }; /* Align to 16 bytes as a paranoia measure */ cmdline_size = (strlen(kernel_cmdline) + 16) & ~15; @@ -1070,31 +1067,16 @@ void x86_load_linux(X86MachineState *x86ms, kernel_size = setup_data_offset + sizeof(struct setup_data) + dtb_size; kernel = g_realloc(kernel, kernel_size); + stq_p(header + 0x250, prot_addr + setup_data_offset); setup_data = (struct setup_data *)(kernel + setup_data_offset); - setup_data->next = cpu_to_le64(first_setup_data); - first_setup_data = prot_addr + setup_data_offset; + setup_data->next = 0; setup_data->type = cpu_to_le32(SETUP_DTB); setup_data->len = cpu_to_le32(dtb_size); load_image_size(dtb_filename, setup_data->data, dtb_size); } - if (!legacy_no_rng_seed) { - setup_data_offset = QEMU_ALIGN_UP(kernel_size, 16); - kernel_size = setup_data_offset + sizeof(struct setup_data) + RNG_SEED_LENGTH; - kernel = g_realloc(kernel, kernel_size); - setup_data = (struct setup_data *)(kernel + setup_data_offset); - setup_data->next = cpu_to_le64(first_setup_data); - first_setup_data = prot_addr + setup_data_offset; - setup_data->type = cpu_to_le32(SETUP_RNG_SEED); - setup_data->len = cpu_to_le32(RNG_SEED_LENGTH); - qemu_guest_getrandom_nofail(setup_data->data, RNG_SEED_LENGTH); - } - - /* Offset 0x250 is a pointer to the first setup_data link. */ - stq_p(header + 0x250, first_setup_data); - /* * If we're starting an encrypted VM, it will be OVMF based, which uses the * efi stub for booting and doesn't require any values to be placed in the diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h index c95333514e..0c76e82626 100644 --- a/include/hw/i386/pc.h +++ b/include/hw/i386/pc.h @@ -128,9 +128,6 @@ struct PCMachineClass { /* create kvmclock device even when KVM PV features are not exposed */ bool kvmclock_create_always; - - /* skip passing an rng seed for legacy machines */ - bool legacy_no_rng_seed; }; #define TYPE_PC_MACHINE "generic-pc-machine" diff --git a/include/hw/i386/x86.h b/include/hw/i386/x86.h index 62fa5774f8..df82c5fd42 100644 --- a/include/hw/i386/x86.h +++ b/include/hw/i386/x86.h @@ -126,8 +126,7 @@ void x86_bios_rom_init(MachineState *ms, const char *default_firmware, void x86_load_linux(X86MachineState *x86ms, FWCfgState *fw_cfg, int acpi_data_size, - bool pvh_enabled, - bool legacy_no_rng_seed); + bool pvh_enabled); bool x86_machine_is_smm_enabled(const X86MachineState *x86ms); bool x86_machine_is_acpi_enabled(const X86MachineState *x86ms); From fd4bf2632c8cab171949dfe07c91fbb59bf8f416 Mon Sep 17 00:00:00 2001 From: Akihiko Odaki Date: Mon, 30 Jan 2023 23:03:20 +0900 Subject: [PATCH 033/174] vhost-user-gpio: Configure vhost_dev when connecting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit vhost_dev_cleanup(), called from vu_gpio_disconnect(), clears vhost_dev so vhost-user-gpio must set the members of vhost_dev each time connecting. do_vhost_user_cleanup() should also acquire the pointer to vqs directly from VHostUserGPIO instead of referring to vhost_dev as it can be called after vhost_dev_cleanup(). Fixes: 27ba7b027f ("hw/virtio: add boilerplate for vhost-user-gpio device") Signed-off-by: Akihiko Odaki Message-Id: <20230130140320.77999-1-akihiko.odaki@daynix.com> Reviewed-by: Viresh Kumar Reviewed-by: Alex Bennée Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin (cherry picked from commit daae36c13abc73cf1055abc2d33cb71cc5d34310) Signed-off-by: Michael Tokarev --- hw/virtio/vhost-user-gpio.c | 10 ++++++---- include/hw/virtio/vhost-user-gpio.h | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/hw/virtio/vhost-user-gpio.c b/hw/virtio/vhost-user-gpio.c index b7b82a1099..97145376eb 100644 --- a/hw/virtio/vhost-user-gpio.c +++ b/hw/virtio/vhost-user-gpio.c @@ -16,6 +16,7 @@ #include "trace.h" #define REALIZE_CONNECTION_RETRIES 3 +#define VHOST_NVQS 2 /* Features required from VirtIO */ static const int feature_bits[] = { @@ -198,8 +199,7 @@ static void do_vhost_user_cleanup(VirtIODevice *vdev, VHostUserGPIO *gpio) { virtio_delete_queue(gpio->command_vq); virtio_delete_queue(gpio->interrupt_vq); - g_free(gpio->vhost_dev.vqs); - gpio->vhost_dev.vqs = NULL; + g_free(gpio->vhost_vqs); virtio_cleanup(vdev); vhost_user_cleanup(&gpio->vhost_user); } @@ -219,6 +219,9 @@ static int vu_gpio_connect(DeviceState *dev, Error **errp) vhost_dev_set_config_notifier(vhost_dev, &gpio_ops); gpio->vhost_user.supports_config = true; + gpio->vhost_dev.nvqs = VHOST_NVQS; + gpio->vhost_dev.vqs = gpio->vhost_vqs; + ret = vhost_dev_init(vhost_dev, &gpio->vhost_user, VHOST_BACKEND_TYPE_USER, 0, errp); if (ret < 0) { @@ -337,10 +340,9 @@ static void vu_gpio_device_realize(DeviceState *dev, Error **errp) virtio_init(vdev, VIRTIO_ID_GPIO, sizeof(gpio->config)); - gpio->vhost_dev.nvqs = 2; gpio->command_vq = virtio_add_queue(vdev, 256, vu_gpio_handle_output); gpio->interrupt_vq = virtio_add_queue(vdev, 256, vu_gpio_handle_output); - gpio->vhost_dev.vqs = g_new0(struct vhost_virtqueue, gpio->vhost_dev.nvqs); + gpio->vhost_vqs = g_new0(struct vhost_virtqueue, VHOST_NVQS); gpio->connected = false; diff --git a/include/hw/virtio/vhost-user-gpio.h b/include/hw/virtio/vhost-user-gpio.h index a9305c5e6c..a9d3f9b049 100644 --- a/include/hw/virtio/vhost-user-gpio.h +++ b/include/hw/virtio/vhost-user-gpio.h @@ -23,7 +23,7 @@ struct VHostUserGPIO { VirtIODevice parent_obj; CharBackend chardev; struct virtio_gpio_config config; - struct vhost_virtqueue *vhost_vq; + struct vhost_virtqueue *vhost_vqs; struct vhost_dev vhost_dev; VhostUserState vhost_user; VirtQueue *command_vq; From b5be595c62ea6cfe36d73a29e274b78bca704c81 Mon Sep 17 00:00:00 2001 From: Akihiko Odaki Date: Mon, 30 Jan 2023 23:04:35 +0900 Subject: [PATCH 034/174] vhost-user-i2c: Back up vqs before cleaning up vhost_dev vhost_dev_cleanup() clears vhost_dev so back up its vqs member to free the memory pointed by the member. Fixes: 7221d3b634 ("hw/virtio: add boilerplate for vhost-user-i2c device") Signed-off-by: Akihiko Odaki Message-Id: <20230130140435.78049-1-akihiko.odaki@daynix.com> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin (cherry picked from commit 0126793bee853e7c134627f51d2de5428a612e99) Signed-off-by: Michael Tokarev --- hw/virtio/vhost-user-i2c.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/hw/virtio/vhost-user-i2c.c b/hw/virtio/vhost-user-i2c.c index dc5c828ba6..60eaf0d95b 100644 --- a/hw/virtio/vhost-user-i2c.c +++ b/hw/virtio/vhost-user-i2c.c @@ -143,8 +143,6 @@ static void do_vhost_user_cleanup(VirtIODevice *vdev, VHostUserI2C *i2c) vhost_user_cleanup(&i2c->vhost_user); virtio_delete_queue(i2c->vq); virtio_cleanup(vdev); - g_free(i2c->vhost_dev.vqs); - i2c->vhost_dev.vqs = NULL; } static int vu_i2c_connect(DeviceState *dev) @@ -228,6 +226,7 @@ static void vu_i2c_device_realize(DeviceState *dev, Error **errp) ret = vhost_dev_init(&i2c->vhost_dev, &i2c->vhost_user, VHOST_BACKEND_TYPE_USER, 0, errp); if (ret < 0) { + g_free(i2c->vhost_dev.vqs); do_vhost_user_cleanup(vdev, i2c); } @@ -239,10 +238,12 @@ static void vu_i2c_device_unrealize(DeviceState *dev) { VirtIODevice *vdev = VIRTIO_DEVICE(dev); VHostUserI2C *i2c = VHOST_USER_I2C(dev); + struct vhost_virtqueue *vhost_vqs = i2c->vhost_dev.vqs; /* This will stop vhost backend if appropriate. */ vu_i2c_set_status(vdev, 0); vhost_dev_cleanup(&i2c->vhost_dev); + g_free(vhost_vqs); do_vhost_user_cleanup(vdev, i2c); } From b8db116da19f39285347adc1438df200b2db61e5 Mon Sep 17 00:00:00 2001 From: Akihiko Odaki Date: Mon, 30 Jan 2023 23:05:16 +0900 Subject: [PATCH 035/174] vhost-user-rng: Back up vqs before cleaning up vhost_dev vhost_dev_cleanup() clears vhost_dev so back up its vqs member to free the memory pointed by the member. Fixes: 821d28b88f ("vhost-user-rng: Add vhost-user-rng implementation") Signed-off-by: Akihiko Odaki Message-Id: <20230130140516.78078-1-akihiko.odaki@daynix.com> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin (cherry picked from commit f0dac71596d4b87a1a77d1f4efb6a6adb4730d7b) Signed-off-by: Michael Tokarev --- hw/virtio/vhost-user-rng.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/hw/virtio/vhost-user-rng.c b/hw/virtio/vhost-user-rng.c index 201a39e220..efc54cd3fb 100644 --- a/hw/virtio/vhost-user-rng.c +++ b/hw/virtio/vhost-user-rng.c @@ -229,6 +229,7 @@ static void vu_rng_device_realize(DeviceState *dev, Error **errp) return; vhost_dev_init_failed: + g_free(rng->vhost_dev.vqs); virtio_delete_queue(rng->req_vq); virtio_add_queue_failed: virtio_cleanup(vdev); @@ -239,12 +240,12 @@ static void vu_rng_device_unrealize(DeviceState *dev) { VirtIODevice *vdev = VIRTIO_DEVICE(dev); VHostUserRNG *rng = VHOST_USER_RNG(dev); + struct vhost_virtqueue *vhost_vqs = rng->vhost_dev.vqs; vu_rng_set_status(vdev, 0); vhost_dev_cleanup(&rng->vhost_dev); - g_free(rng->vhost_dev.vqs); - rng->vhost_dev.vqs = NULL; + g_free(vhost_vqs); virtio_delete_queue(rng->req_vq); virtio_cleanup(vdev); vhost_user_cleanup(&rng->vhost_user); From 5a1c74097e858ce67cbdf58c885de7bf1fe84abd Mon Sep 17 00:00:00 2001 From: "Dr. David Alan Gilbert" Date: Mon, 9 Jan 2023 10:58:09 +0000 Subject: [PATCH 036/174] virtio-rng-pci: fix migration compat for vectors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixup the migration compatibility for existing machine types so that they do not enable msi-x. Symptom: (qemu) qemu: get_pci_config_device: Bad config data: i=0x34 read: 84 device: 98 cmask: ff wmask: 0 w1cmask:0 qemu: Failed to load PCIDevice:config qemu: Failed to load virtio-rng:virtio qemu: error while loading state for instance 0x0 of device '0000:00:03.0/virtio-rng' qemu: load of migration failed: Invalid argument Note: This fix will break migration from 7.2->7.2-fixed with this patch bz: https://bugzilla.redhat.com/show_bug.cgi?id=2155749 Fixes: 9ea02e8f1 ("virtio-rng-pci: Allow setting nvectors, so we can use MSI-X") Signed-off-by: Dr. David Alan Gilbert Message-Id: <20230109105809.163975-1-dgilbert@redhat.com> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Reviewed-by: Thomas Huth Acked-by: David Daney Fixes: 9ea02e8f1 ("virtio-rng-pci: Allow setting nvectors, so we can use MSI-X")
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé (cherry picked from commit bad9c5a5166fd5e3a892b7b0477cf2f4bd3a959a) Signed-off-by: Michael Tokarev --- hw/core/machine.c | 1 + 1 file changed, 1 insertion(+) diff --git a/hw/core/machine.c b/hw/core/machine.c index 8d34caa31d..77a0a131d1 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -42,6 +42,7 @@ GlobalProperty hw_compat_7_1[] = { { "virtio-device", "queue_reset", "false" }, + { "virtio-rng-pci", "vectors", "0" }, }; const size_t hw_compat_7_1_len = G_N_ELEMENTS(hw_compat_7_1); From 0546b42bce213c12e41b3af40738c08a8bbef23a Mon Sep 17 00:00:00 2001 From: "Dr. David Alan Gilbert" Date: Tue, 7 Feb 2023 17:49:44 +0000 Subject: [PATCH 037/174] virtio-rng-pci: fix transitional migration compat for vectors In bad9c5a516 ("virtio-rng-pci: fix migration compat for vectors") I fixed the virtio-rng-pci migration compatibility, but it was discovered that we also need to fix the other aliases of the device for the transitional cases. Fixes: 9ea02e8f1 ('virtio-rng-pci: Allow setting nvectors, so we can use MSI-X') bz: https://bugzilla.redhat.com/show_bug.cgi?id=2162569 Signed-off-by: Dr. David Alan Gilbert Message-Id: <20230207174944.138255-1-dgilbert@redhat.com> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin (cherry picked from commit 62bdb8871512076841f4464f7e26efdc7783f78d) Signed-off-by: Michael Tokarev --- hw/core/machine.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hw/core/machine.c b/hw/core/machine.c index 77a0a131d1..035d078a74 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -43,6 +43,8 @@ GlobalProperty hw_compat_7_1[] = { { "virtio-device", "queue_reset", "false" }, { "virtio-rng-pci", "vectors", "0" }, + { "virtio-rng-pci-transitional", "vectors", "0" }, + { "virtio-rng-pci-non-transitional", "vectors", "0" }, }; const size_t hw_compat_7_1_len = G_N_ELEMENTS(hw_compat_7_1); From c21a2456b6d35813dfb196d9079094cc4801b2c0 Mon Sep 17 00:00:00 2001 From: Akihiko Odaki Date: Tue, 31 Jan 2023 12:00:37 +0900 Subject: [PATCH 038/174] hw/timer/hpet: Fix expiration time overflow The expiration time provided for timer_mod() can overflow if a ridiculously large value is set to the comparator register. The resulting value can represent a past time after rounded, forcing the timer to fire immediately. If the timer is configured as periodic, it will rearm the timer again, and form an endless loop. Check if the expiration value will overflow, and if it will, stop the timer instead of rearming the timer with the overflowed time. This bug was found by Alexander Bulekov when fuzzing igb, a new network device emulation: https://patchew.org/QEMU/20230129053316.1071513-1-alxndr@bu.edu/ The fixed test case is: fuzz/crash_2d7036941dcda1ad4380bb8a9174ed0c949bcefd Fixes: 16b29ae180 ("Add HPET emulation to qemu (Beth Kon)") Signed-off-by: Akihiko Odaki Acked-by: Michael S. Tsirkin Message-Id: <20230131030037.18856-1-akihiko.odaki@daynix.com> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin (cherry picked from commit 37d2bcbc2a4e9c2e9061bec72a32c7e49b9f81ec) Signed-off-by: Michael Tokarev --- hw/timer/hpet.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/hw/timer/hpet.c b/hw/timer/hpet.c index 9520471be2..5f88ffdef8 100644 --- a/hw/timer/hpet.c +++ b/hw/timer/hpet.c @@ -352,6 +352,16 @@ static const VMStateDescription vmstate_hpet = { } }; +static void hpet_arm(HPETTimer *t, uint64_t ticks) +{ + if (ticks < ns_to_ticks(INT64_MAX / 2)) { + timer_mod(t->qemu_timer, + qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + ticks_to_ns(ticks)); + } else { + timer_del(t->qemu_timer); + } +} + /* * timer expiration callback */ @@ -374,13 +384,11 @@ static void hpet_timer(void *opaque) } } diff = hpet_calculate_diff(t, cur_tick); - timer_mod(t->qemu_timer, - qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + (int64_t)ticks_to_ns(diff)); + hpet_arm(t, diff); } else if (t->config & HPET_TN_32BIT && !timer_is_periodic(t)) { if (t->wrap_flag) { diff = hpet_calculate_diff(t, cur_tick); - timer_mod(t->qemu_timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + - (int64_t)ticks_to_ns(diff)); + hpet_arm(t, diff); t->wrap_flag = 0; } } @@ -407,8 +415,7 @@ static void hpet_set_timer(HPETTimer *t) t->wrap_flag = 1; } } - timer_mod(t->qemu_timer, - qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + (int64_t)ticks_to_ns(diff)); + hpet_arm(t, diff); } static void hpet_del_timer(HPETTimer *t) From e2672ec498f07957f527484ab4c4d20c8cfde7d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= Date: Thu, 9 Feb 2023 18:00:04 +0100 Subject: [PATCH 039/174] vdpa: stop all svq on device deletion MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Not stopping them leave the device in a bad state when virtio-net fronted device is unplugged with device_del monitor command. This is not triggable in regular poweroff or qemu forces shutdown because cleanup is called right after vhost_vdpa_dev_start(false). But devices hot unplug does not call vdpa device cleanups. This lead to all the vhost_vdpa devices without stop the SVQ but the last. Fix it and clean the code, making it symmetric with vhost_vdpa_svqs_start. Fixes: dff4426fa656 ("vhost: Add Shadow VirtQueue kick forwarding capabilities") Reported-by: Lei Yang Signed-off-by: Eugenio Pérez Message-Id: <20230209170004.899472-1-eperezma@redhat.com> Tested-by: Laurent Vivier Acked-by: Jason Wang (cherry picked from commit 2e1a9de96b487cf818a22d681cad8d3f5d18dcca) Signed-off-by: Michael Tokarev Mjt: this required manual edit for stable-7.2 --- hw/virtio/vhost-vdpa.c | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c index 7468e44b87..03c78d25d8 100644 --- a/hw/virtio/vhost-vdpa.c +++ b/hw/virtio/vhost-vdpa.c @@ -707,26 +707,11 @@ static int vhost_vdpa_get_device_id(struct vhost_dev *dev, return ret; } -static void vhost_vdpa_reset_svq(struct vhost_vdpa *v) -{ - if (!v->shadow_vqs_enabled) { - return; - } - - for (unsigned i = 0; i < v->shadow_vqs->len; ++i) { - VhostShadowVirtqueue *svq = g_ptr_array_index(v->shadow_vqs, i); - vhost_svq_stop(svq); - } -} - static int vhost_vdpa_reset_device(struct vhost_dev *dev) { - struct vhost_vdpa *v = dev->opaque; int ret; uint8_t status = 0; - vhost_vdpa_reset_svq(v); - ret = vhost_vdpa_call(dev, VHOST_VDPA_SET_STATUS, &status); trace_vhost_vdpa_reset_device(dev, status); return ret; @@ -1088,6 +1073,8 @@ static void vhost_vdpa_svqs_stop(struct vhost_dev *dev) for (unsigned i = 0; i < v->shadow_vqs->len; ++i) { VhostShadowVirtqueue *svq = g_ptr_array_index(v->shadow_vqs, i); + + vhost_svq_stop(svq); vhost_vdpa_svq_unmap_rings(dev, svq); } } From a7485cdca768b195dd062b326aa4791c3fefeffd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20L=C3=B3pez?= Date: Mon, 13 Feb 2023 09:57:47 +0100 Subject: [PATCH 040/174] vhost: avoid a potential use of an uninitialized variable in vhost_svq_poll() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In vhost_svq_poll(), if vhost_svq_get_buf() fails due to a device providing invalid descriptors, len is left uninitialized and returned to the caller, potentally leaking stack data or causing undefined behavior. Fix this by initializing len to 0. Found with GCC 13 and -fanalyzer (abridged): ../hw/virtio/vhost-shadow-virtqueue.c: In function ‘vhost_svq_poll’: ../hw/virtio/vhost-shadow-virtqueue.c:538:12: warning: use of uninitialized value ‘len’ [CWE-457] [-Wanalyzer-use-of-uninitialized-value] 538 | return len; | ^~~ ‘vhost_svq_poll’: events 1-4 | | 522 | size_t vhost_svq_poll(VhostShadowVirtqueue *svq) | | ^~~~~~~~~~~~~~ | | | | | (1) entry to ‘vhost_svq_poll’ |...... | 525 | uint32_t len; | | ~~~ | | | | | (2) region created on stack here | | (3) capacity: 4 bytes |...... | 528 | if (vhost_svq_more_used(svq)) { | | ~ | | | | | (4) inlined call to ‘vhost_svq_more_used’ from ‘vhost_svq_poll’ (...) | 528 | if (vhost_svq_more_used(svq)) { | | ^~~~~~~~~~~~~~~~~~~~~~~~~ | | || | | |(8) ...to here | | (7) following ‘true’ branch... |...... | 537 | vhost_svq_get_buf(svq, &len); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (9) calling ‘vhost_svq_get_buf’ from ‘vhost_svq_poll’ | +--> ‘vhost_svq_get_buf’: events 10-11 | | 416 | static VirtQueueElement *vhost_svq_get_buf(VhostShadowVirtqueue *svq, | | ^~~~~~~~~~~~~~~~~ | | | | | (10) entry to ‘vhost_svq_get_buf’ |...... | 423 | if (!vhost_svq_more_used(svq)) { | | ~ | | | | | (11) inlined call to ‘vhost_svq_more_used’ from ‘vhost_svq_get_buf’ | (...) | ‘vhost_svq_get_buf’: event 14 | | 423 | if (!vhost_svq_more_used(svq)) { | | ^ | | | | | (14) following ‘false’ branch... | ‘vhost_svq_get_buf’: event 15 | |cc1: | (15): ...to here | <------+ | ‘vhost_svq_poll’: events 16-17 | | 537 | vhost_svq_get_buf(svq, &len); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (16) returning to ‘vhost_svq_poll’ from ‘vhost_svq_get_buf’ | 538 | return len; | | ~~~ | | | | | (17) use of uninitialized value ‘len’ here Note by Laurent Vivier : The return value is only used to detect an error: vhost_svq_poll vhost_vdpa_net_cvq_add vhost_vdpa_net_load_cmd vhost_vdpa_net_load_mac -> a negative return is only used to detect error vhost_vdpa_net_load_mq -> a negative return is only used to detect error vhost_vdpa_net_handle_ctrl_avail -> a negative return is only used to detect error Fixes: d368c0b052ad ("vhost: Do not depend on !NULL VirtQueueElement on vhost_svq_flush") Signed-off-by: Carlos López Message-Id: <20230213085747.19956-1-clopez@suse.de> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin (cherry picked from commit e4dd39c699b7d63a06f686ec06ded8adbee989c1) Signed-off-by: Michael Tokarev --- hw/virtio/vhost-shadow-virtqueue.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/virtio/vhost-shadow-virtqueue.c b/hw/virtio/vhost-shadow-virtqueue.c index 5bd14cad96..a723073747 100644 --- a/hw/virtio/vhost-shadow-virtqueue.c +++ b/hw/virtio/vhost-shadow-virtqueue.c @@ -522,7 +522,7 @@ static void vhost_svq_flush(VhostShadowVirtqueue *svq, size_t vhost_svq_poll(VhostShadowVirtqueue *svq) { int64_t start_us = g_get_monotonic_time(); - uint32_t len; + uint32_t len = 0; do { if (vhost_svq_more_used(svq)) { From 6cf13d9d0135ed7183cd43b48193afd179f395e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20L=C3=B3pez?= Date: Fri, 10 Feb 2023 12:25:15 +0100 Subject: [PATCH 041/174] libvhost-user: check for NULL when allocating a virtqueue element MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Check the return value for malloc(), avoiding a NULL pointer dereference, and propagate error in function callers. Found with GCC 13 and -fanalyzer: ../subprojects/libvhost-user/libvhost-user.c: In function ‘virtqueue_alloc_element’: ../subprojects/libvhost-user/libvhost-user.c:2556:19: error: dereference of possibly-NULL ‘elem’ [CWE-690] [-Werror=analyzer-possible-null-dereference] 2556 | elem->out_num = out_num; | ~~~~~~~~~~~~~~^~~~~~~~~ ‘virtqueue_alloc_element’: event 1 | | 2554 | assert(sz >= sizeof(VuVirtqElement)); | | ^~~~~~ | | | | | (1) following ‘true’ branch (when ‘sz > 31’)... | ‘virtqueue_alloc_element’: events 2-4 | | 2555 | elem = malloc(out_sg_end); | | ^~~~ ~~~~~~~~~~~~~~~~~~ | | | | | | | (3) this call could return NULL | | (2) ...to here | 2556 | elem->out_num = out_num; | | ~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (4) ‘elem’ could be NULL: unchecked value from (3) | Signed-off-by: Carlos López Message-Id: <20230210112514.16858-1-clopez@suse.de> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin (cherry picked from commit 9c1916057a8b14411116106e5a5c0c33d551cfeb) Signed-off-by: Michael Tokarev --- subprojects/libvhost-user/libvhost-user.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/subprojects/libvhost-user/libvhost-user.c b/subprojects/libvhost-user/libvhost-user.c index d6ee6e7d91..b17e82b2b0 100644 --- a/subprojects/libvhost-user/libvhost-user.c +++ b/subprojects/libvhost-user/libvhost-user.c @@ -2547,6 +2547,10 @@ virtqueue_alloc_element(size_t sz, assert(sz >= sizeof(VuVirtqElement)); elem = malloc(out_sg_end); + if (!elem) { + DPRINT("%s: failed to malloc virtqueue element\n", __func__); + return NULL; + } elem->out_num = out_num; elem->in_num = in_num; elem->in_sg = (void *)elem + in_sg_ofs; @@ -2633,6 +2637,9 @@ vu_queue_map_desc(VuDev *dev, VuVirtq *vq, unsigned int idx, size_t sz) /* Now copy what we have collected and mapped */ elem = virtqueue_alloc_element(sz, out_num, in_num); + if (!elem) { + return NULL; + } elem->index = idx; for (i = 0; i < out_num; i++) { elem->out_sg[i] = iov[i]; From 2529bbf4a70d591c02e7a94a15d1e3dd4dbcfae1 Mon Sep 17 00:00:00 2001 From: Yajun Wu Date: Tue, 14 Feb 2023 10:14:30 +0800 Subject: [PATCH 042/174] chardev/char-socket: set s->listener = NULL in char_socket_finalize MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After live migration with virtio block device, qemu crash at: #0 0x000055914f46f795 in object_dynamic_cast_assert (obj=0x559151b7b090, typename=0x55914f80fbc4 "qio-channel", file=0x55914f80fb90 "/images/testvfe/sw/qemu.gerrit/include/io/channel.h", line=30, func=0x55914f80fcb8 <__func__.17257> "QIO_CHANNEL") at ../qom/object.c:872 #1 0x000055914f480d68 in QIO_CHANNEL (obj=0x559151b7b090) at /images/testvfe/sw/qemu.gerrit/include/io/channel.h:29 #2 0x000055914f4812f8 in qio_net_listener_set_client_func_full (listener=0x559151b7a720, func=0x55914f580b97 , data=0x5591519f4ea0, notify=0x0, context=0x0) at ../io/net-listener.c:166 #3 0x000055914f580059 in tcp_chr_update_read_handler (chr=0x5591519f4ea0) at ../chardev/char-socket.c:637 #4 0x000055914f583dca in qemu_chr_be_update_read_handlers (s=0x5591519f4ea0, context=0x0) at ../chardev/char.c:226 #5 0x000055914f57b7c9 in qemu_chr_fe_set_handlers_full (b=0x559152bf23a0, fd_can_read=0x0, fd_read=0x0, fd_event=0x0, be_change=0x0, opaque=0x0, context=0x0, set_open=false, sync_state=true) at ../chardev/char-fe.c:279 #6 0x000055914f57b86d in qemu_chr_fe_set_handlers (b=0x559152bf23a0, fd_can_read=0x0, fd_read=0x0, fd_event=0x0, be_change=0x0, opaque=0x0, context=0x0, set_open=false) at ../chardev/char-fe.c:304 #7 0x000055914f378caf in vhost_user_async_close (d=0x559152bf21a0, chardev=0x559152bf23a0, vhost=0x559152bf2420, cb=0x55914f2fb8c1 ) at ../hw/virtio/vhost-user.c:2725 #8 0x000055914f2fba40 in vhost_user_blk_event (opaque=0x559152bf21a0, event=CHR_EVENT_CLOSED) at ../hw/block/vhost-user-blk.c:395 #9 0x000055914f58388c in chr_be_event (s=0x5591519f4ea0, event=CHR_EVENT_CLOSED) at ../chardev/char.c:61 #10 0x000055914f583905 in qemu_chr_be_event (s=0x5591519f4ea0, event=CHR_EVENT_CLOSED) at ../chardev/char.c:81 #11 0x000055914f581275 in char_socket_finalize (obj=0x5591519f4ea0) at ../chardev/char-socket.c:1083 #12 0x000055914f46f073 in object_deinit (obj=0x5591519f4ea0, type=0x5591519055c0) at ../qom/object.c:680 #13 0x000055914f46f0e5 in object_finalize (data=0x5591519f4ea0) at ../qom/object.c:694 #14 0x000055914f46ff06 in object_unref (objptr=0x5591519f4ea0) at ../qom/object.c:1202 #15 0x000055914f4715a4 in object_finalize_child_property (obj=0x559151b76c50, name=0x559151b7b250 "char3", opaque=0x5591519f4ea0) at ../qom/object.c:1747 #16 0x000055914f46ee86 in object_property_del_all (obj=0x559151b76c50) at ../qom/object.c:632 #17 0x000055914f46f0d2 in object_finalize (data=0x559151b76c50) at ../qom/object.c:693 #18 0x000055914f46ff06 in object_unref (objptr=0x559151b76c50) at ../qom/object.c:1202 #19 0x000055914f4715a4 in object_finalize_child_property (obj=0x559151b6b560, name=0x559151b76630 "chardevs", opaque=0x559151b76c50) at ../qom/object.c:1747 #20 0x000055914f46ef67 in object_property_del_child (obj=0x559151b6b560, child=0x559151b76c50) at ../qom/object.c:654 #21 0x000055914f46f042 in object_unparent (obj=0x559151b76c50) at ../qom/object.c:673 #22 0x000055914f58632a in qemu_chr_cleanup () at ../chardev/char.c:1189 #23 0x000055914f16c66c in qemu_cleanup () at ../softmmu/runstate.c:830 #24 0x000055914eee7b9e in qemu_default_main () at ../softmmu/main.c:38 #25 0x000055914eee7bcc in main (argc=86, argv=0x7ffc97cb8d88) at ../softmmu/main.c:48 In char_socket_finalize after s->listener freed, event callback function vhost_user_blk_event will be called to handle CHR_EVENT_CLOSED. vhost_user_blk_event is calling qio_net_listener_set_client_func_full which is still using s->listener. Setting s->listener = NULL after object_unref(OBJECT(s->listener)) can solve this issue. Signed-off-by: Yajun Wu Acked-by: Jiri Pirko Message-Id: <20230214021430.3638579-1-yajunw@nvidia.com> Reviewed-by: Marc-André Lureau Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin (cherry picked from commit b8a7f51f59e28d5a8e0c07ed3919cc9695560ed2) Signed-off-by: Michael Tokarev --- chardev/char-socket.c | 1 + 1 file changed, 1 insertion(+) diff --git a/chardev/char-socket.c b/chardev/char-socket.c index 879564aa8a..b00efb1482 100644 --- a/chardev/char-socket.c +++ b/chardev/char-socket.c @@ -1065,6 +1065,7 @@ static void char_socket_finalize(Object *obj) qio_net_listener_set_client_func_full(s->listener, NULL, NULL, NULL, chr->gcontext); object_unref(OBJECT(s->listener)); + s->listener = NULL; } if (s->tls_creds) { object_unref(OBJECT(s->tls_creds)); From f6d602d078e3e680ec713bb28045fb8fa3d17fac Mon Sep 17 00:00:00 2001 From: Jason Wang Date: Thu, 23 Feb 2023 14:59:20 +0800 Subject: [PATCH 043/174] intel-iommu: fail MAP notifier without caching mode Without caching mode, MAP notifier won't work correctly since guest won't send IOTLB update event when it establishes new mappings in the I/O page tables. Let's fail the IOMMU notifiers early instead of misbehaving silently. Reviewed-by: Eric Auger Tested-by: Viktor Prutyanov Signed-off-by: Jason Wang Message-Id: <20230223065924.42503-2-jasowang@redhat.com> Reviewed-by: Peter Xu Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin (cherry picked from commit b8d78277c091f26fdd64f239bc8bb7e55d74cecf) Signed-off-by: Michael Tokarev --- hw/i386/intel_iommu.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index a08ee85edf..9143376677 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -3186,6 +3186,13 @@ static int vtd_iommu_notify_flag_changed(IOMMUMemoryRegion *iommu, "Snoop Control with vhost or VFIO is not supported"); return -ENOTSUP; } + if (!s->caching_mode && (new & IOMMU_NOTIFIER_MAP)) { + error_setg_errno(errp, ENOTSUP, + "device %02x.%02x.%x requires caching mode", + pci_bus_num(vtd_as->bus), PCI_SLOT(vtd_as->devfn), + PCI_FUNC(vtd_as->devfn)); + return -ENOTSUP; + } /* Update per-address-space notifier flags */ vtd_as->notifier_flags = new; From b05232a25659ea14eb0b477c17aca9a7ce50bb64 Mon Sep 17 00:00:00 2001 From: Jason Wang Date: Thu, 23 Feb 2023 14:59:21 +0800 Subject: [PATCH 044/174] intel-iommu: fail DEVIOTLB_UNMAP without dt mode Without dt mode, device IOTLB notifier won't work since guest won't send device IOTLB invalidation descriptor in this case. Let's fail early instead of misbehaving silently. Reviewed-by: Laurent Vivier Tested-by: Laurent Vivier Tested-by: Viktor Prutyanov Buglink: https://bugzilla.redhat.com/2156876 Signed-off-by: Jason Wang Message-Id: <20230223065924.42503-3-jasowang@redhat.com> Reviewed-by: Peter Xu Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin (cherry picked from commit 09adb0e021207b60a0c51a68939b4539d98d3ef3) Signed-off-by: Michael Tokarev --- hw/i386/intel_iommu.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index 9143376677..d025ef2873 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -3179,6 +3179,7 @@ static int vtd_iommu_notify_flag_changed(IOMMUMemoryRegion *iommu, { VTDAddressSpace *vtd_as = container_of(iommu, VTDAddressSpace, iommu); IntelIOMMUState *s = vtd_as->iommu_state; + X86IOMMUState *x86_iommu = X86_IOMMU_DEVICE(s); /* TODO: add support for VFIO and vhost users */ if (s->snoop_control) { @@ -3193,6 +3194,13 @@ static int vtd_iommu_notify_flag_changed(IOMMUMemoryRegion *iommu, PCI_FUNC(vtd_as->devfn)); return -ENOTSUP; } + if (!x86_iommu->dt_supported && (new & IOMMU_NOTIFIER_DEVIOTLB_UNMAP)) { + error_setg_errno(errp, ENOTSUP, + "device %02x.%02x.%x requires device IOTLB mode", + pci_bus_num(vtd_as->bus), PCI_SLOT(vtd_as->devfn), + PCI_FUNC(vtd_as->devfn)); + return -ENOTSUP; + } /* Update per-address-space notifier flags */ vtd_as->notifier_flags = new; From 7c8a67ed462a1089e7c3837cb94579031c6ecc6b Mon Sep 17 00:00:00 2001 From: Anton Johansson Date: Mon, 23 Jan 2023 21:14:31 +0100 Subject: [PATCH 045/174] block: Handle curl 7.55.0, 7.85.0 version changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 7.55.0 deprecates CURLINFO_CONTENT_LENGTH_DOWNLOAD in favour of a *_T version, which returns curl_off_t instead of a double. * 7.85.0 deprecates CURLOPT_PROTOCOLS and CURLOPT_REDIR_PROTOCOLS in favour of *_STR variants, specifying the desired protocols via a string. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1440 Signed-off-by: Anton Johansson Message-Id: <20230123201431.23118-1-anjo@rev.ng> Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Kevin Wolf Signed-off-by: Kevin Wolf (cherry picked from commit e7b8d9d038f313c2b9e601609e7d7c3ca6ad0234) Signed-off-by: Michael Tokarev --- block/curl.c | 44 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/block/curl.c b/block/curl.c index cba4c4cac7..0b125095e3 100644 --- a/block/curl.c +++ b/block/curl.c @@ -37,8 +37,15 @@ // #define DEBUG_VERBOSE +/* CURL 7.85.0 switches to a string based API for specifying + * the desired protocols. + */ +#if LIBCURL_VERSION_NUM >= 0x075500 +#define PROTOCOLS "HTTP,HTTPS,FTP,FTPS" +#else #define PROTOCOLS (CURLPROTO_HTTP | CURLPROTO_HTTPS | \ CURLPROTO_FTP | CURLPROTO_FTPS) +#endif #define CURL_NUM_STATES 8 #define CURL_NUM_ACB 8 @@ -509,9 +516,18 @@ static int curl_init_state(BDRVCURLState *s, CURLState *state) * obscure protocols. For example, do not allow POP3/SMTP/IMAP see * CVE-2013-0249. * - * Restricting protocols is only supported from 7.19.4 upwards. + * Restricting protocols is only supported from 7.19.4 upwards. Note: + * version 7.85.0 deprecates CURLOPT_*PROTOCOLS in favour of a string + * based CURLOPT_*PROTOCOLS_STR API. */ -#if LIBCURL_VERSION_NUM >= 0x071304 +#if LIBCURL_VERSION_NUM >= 0x075500 + if (curl_easy_setopt(state->curl, + CURLOPT_PROTOCOLS_STR, PROTOCOLS) || + curl_easy_setopt(state->curl, + CURLOPT_REDIR_PROTOCOLS_STR, PROTOCOLS)) { + goto err; + } +#elif LIBCURL_VERSION_NUM >= 0x071304 if (curl_easy_setopt(state->curl, CURLOPT_PROTOCOLS, PROTOCOLS) || curl_easy_setopt(state->curl, CURLOPT_REDIR_PROTOCOLS, PROTOCOLS)) { goto err; @@ -669,7 +685,12 @@ static int curl_open(BlockDriverState *bs, QDict *options, int flags, const char *file; const char *cookie; const char *cookie_secret; - double d; + /* CURL >= 7.55.0 uses curl_off_t for content length instead of a double */ +#if LIBCURL_VERSION_NUM >= 0x073700 + curl_off_t cl; +#else + double cl; +#endif const char *secretid; const char *protocol_delimiter; int ret; @@ -796,27 +817,36 @@ static int curl_open(BlockDriverState *bs, QDict *options, int flags, } if (curl_easy_perform(state->curl)) goto out; - if (curl_easy_getinfo(state->curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &d)) { + /* CURL 7.55.0 deprecates CURLINFO_CONTENT_LENGTH_DOWNLOAD in favour of + * the *_T version which returns a more sensible type for content length. + */ +#if LIBCURL_VERSION_NUM >= 0x073700 + if (curl_easy_getinfo(state->curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, &cl)) { goto out; } +#else + if (curl_easy_getinfo(state->curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &cl)) { + goto out; + } +#endif /* Prior CURL 7.19.4 return value of 0 could mean that the file size is not * know or the size is zero. From 7.19.4 CURL returns -1 if size is not * known and zero if it is really zero-length file. */ #if LIBCURL_VERSION_NUM >= 0x071304 - if (d < 0) { + if (cl < 0) { pstrcpy(state->errmsg, CURL_ERROR_SIZE, "Server didn't report file size."); goto out; } #else - if (d <= 0) { + if (cl <= 0) { pstrcpy(state->errmsg, CURL_ERROR_SIZE, "Unknown file size or zero-length file."); goto out; } #endif - s->len = d; + s->len = cl; if ((!strncasecmp(s->url, "http://", strlen("http://")) || !strncasecmp(s->url, "https://", strlen("https://"))) From 9d46d348f649f640b2ba0b0b160b562c8f720fc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Wed, 21 Dec 2022 09:04:09 +0000 Subject: [PATCH 046/174] tests/tcg: fix unused variable in linux-test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The latest hexagon compiler picks up that we never consume wcount. Given the name of the #define that rcount checks against is WCOUNT_MAX I figured the check just got missed. Signed-off-by: Alex Bennée Reviewed-by: Philippe Mathieu-Daudé Message-Id: <20221221090411.1995037-5-alex.bennee@linaro.org> (cherry picked from commit 2bc6c79417b89c3306b724577e775f03fe61fb2e) Signed-off-by: Michael Tokarev --- tests/tcg/multiarch/linux/linux-test.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/tcg/multiarch/linux/linux-test.c b/tests/tcg/multiarch/linux/linux-test.c index 5a2a4f2258..64f57cb287 100644 --- a/tests/tcg/multiarch/linux/linux-test.c +++ b/tests/tcg/multiarch/linux/linux-test.c @@ -354,13 +354,17 @@ static void test_pipe(void) if (FD_ISSET(fds[0], &rfds)) { chk_error(read(fds[0], &ch, 1)); rcount++; - if (rcount >= WCOUNT_MAX) + if (rcount >= WCOUNT_MAX) { break; + } } if (FD_ISSET(fds[1], &wfds)) { ch = 'a'; chk_error(write(fds[1], &ch, 1)); wcount++; + if (wcount >= WCOUNT_MAX) { + break; + } } } } From e807a1c29f90d50ba5a26a787048451092ec0d4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Date: Tue, 24 Jan 2023 18:00:57 +0000 Subject: [PATCH 047/174] build-sys: fix crlf-ending C code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On msys2, the shader-to-C script produces bad C: ./ui/shader/texture-blit-vert.h:2:5: error: missing terminating " character [-Werror] Fix it by changing the line ending from crlf to lf, and convert the script to Python (qemu build seems perl-free after that). Signed-off-by: Marc-André Lureau Acked-by: Thomas Huth Message-Id: <20230110132700.833690-2-marcandre.lureau@redhat.com> Signed-off-by: Alex Bennée Message-Id: <20230124180127.1881110-6-alex.bennee@linaro.org> (cherry picked from commit e2c4012bc35894d60e54bd077ceaaae565d43c15) Signed-off-by: Michael Tokarev --- meson.build | 2 +- scripts/shaderinclude.pl | 16 ---------------- scripts/shaderinclude.py | 26 ++++++++++++++++++++++++++ 3 files changed, 27 insertions(+), 17 deletions(-) delete mode 100644 scripts/shaderinclude.pl create mode 100644 scripts/shaderinclude.py diff --git a/meson.build b/meson.build index 5c6b5a1c75..b88867ca9d 100644 --- a/meson.build +++ b/meson.build @@ -2777,7 +2777,7 @@ config_host_data.set('CONFIG_SLIRP', slirp.found()) genh += configure_file(output: 'config-host.h', configuration: config_host_data) hxtool = find_program('scripts/hxtool') -shaderinclude = find_program('scripts/shaderinclude.pl') +shaderinclude = find_program('scripts/shaderinclude.py') qapi_gen = find_program('scripts/qapi-gen.py') qapi_gen_depends = [ meson.current_source_dir() / 'scripts/qapi/__init__.py', meson.current_source_dir() / 'scripts/qapi/commands.py', diff --git a/scripts/shaderinclude.pl b/scripts/shaderinclude.pl deleted file mode 100644 index cd3bb40b12..0000000000 --- a/scripts/shaderinclude.pl +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env perl -use strict; -use warnings; - -my $file = shift; -open FILE, "<", $file or die "open $file: $!"; -my $name = $file; -$name =~ s|.*/||; -$name =~ s/[-.]/_/g; -print "static GLchar ${name}_src[] =\n"; -while () { - chomp; - printf " \"%s\\n\"\n", $_; -} -print " \"\\n\";\n"; -close FILE; diff --git a/scripts/shaderinclude.py b/scripts/shaderinclude.py new file mode 100644 index 0000000000..ab2aade2cd --- /dev/null +++ b/scripts/shaderinclude.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2023 Red Hat, Inc. +# +# SPDX-License-Identifier: GPL-2.0-or-later + +import sys +import os + + +def main(args): + file_path = args[1] + basename = os.path.basename(file_path) + varname = basename.replace('-', '_').replace('.', '_') + + with os.fdopen(sys.stdout.fileno(), "wt", closefd=False, newline='\n') as stdout: + with open(file_path, "r", encoding='utf-8') as file: + print(f'static GLchar {varname}_src[] =', file=stdout) + for line in file: + line = line.rstrip() + print(f' "{line}\\n"', file=stdout) + print(' "\\n";', file=stdout) + + +if __name__ == '__main__': + sys.exit(main(sys.argv)) From 32b8913f725aaad6cf6aa7462a9b15e350a40b1d Mon Sep 17 00:00:00 2001 From: Michael Tokarev Date: Thu, 30 Mar 2023 10:12:46 +0300 Subject: [PATCH 048/174] Update version for 7.2.1 release Signed-off-by: Michael Tokarev --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 0ee843cc60..b26a34e470 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -7.2.0 +7.2.1 From 099e8cd9eac7924c9439d51786eda0988bd8f0b7 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Tue, 7 Feb 2023 08:51:11 +0100 Subject: [PATCH 049/174] qga: Drop dangling reference to QERR_QGA_LOGGING_DISABLED MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit slog()'s function comment advises to use QERR_QGA_LOGGING_DISABLED. This macro never existed. The reference got added in commit e3d4d25206a "guest agent: add guest agent RPCs/commands" along with QERR_QGA_LOGGING_FAILED, so maybe that one was meant. However, QERR_QGA_LOGGING_FAILED was never actually used, and was removed in commit d73f0beadb5 "qerror.h: Remove unused error classes". Drop the dangling reference. Signed-off-by: Markus Armbruster Message-Id: <20230207075115.1525-9-armbru@redhat.com> Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Juan Quintela Reviewed-by: Konstantin Kostiuk (cherry picked from commit c40233593ed5732de1676412527e42431e33e62c) Signed-off-by: Michael Tokarev --- qga/commands.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/qga/commands.c b/qga/commands.c index 7ff551d092..6cf978322e 100644 --- a/qga/commands.c +++ b/qga/commands.c @@ -32,9 +32,8 @@ #define GUEST_FILE_READ_COUNT_MAX (48 * MiB) /* Note: in some situations, like with the fsfreeze, logging may be - * temporarilly disabled. if it is necessary that a command be able - * to log for accounting purposes, check ga_logging_enabled() beforehand, - * and use the QERR_QGA_LOGGING_DISABLED to generate an error + * temporarily disabled. if it is necessary that a command be able + * to log for accounting purposes, check ga_logging_enabled() beforehand. */ void slog(const gchar *fmt, ...) { From 5bfbcc3faa43e59e09e9f96ac7eebd98e05ea8e3 Mon Sep 17 00:00:00 2001 From: Konstantin Kostiuk Date: Fri, 3 Mar 2023 21:20:07 +0200 Subject: [PATCH 050/174] qga/win32: Remove change action from MSI installer Remove the 'change' button from "Programs and Features" because it does not checks if a user is an admin or not. The installer has no components to choose from and always installs everything. So the 'change' button is not obviously needed but can create a security issue. resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2167423 fixes: CVE-2023-0664 (part 1 of 2) Signed-off-by: Konstantin Kostiuk Reviewed-by: Yan Vugenfirer Reported-by: Brian Wiltse (cherry picked from commit 88288c2a51faa7c795f053fc8b31b1c16ff804c5) Signed-off-by: Michael Tokarev --- qga/installer/qemu-ga.wxs | 1 + 1 file changed, 1 insertion(+) diff --git a/qga/installer/qemu-ga.wxs b/qga/installer/qemu-ga.wxs index 813d1c6ca6..3442383627 100644 --- a/qga/installer/qemu-ga.wxs +++ b/qga/installer/qemu-ga.wxs @@ -31,6 +31,7 @@ /> + From b209cc4556d56938fa8a933670b8fb98c036af37 Mon Sep 17 00:00:00 2001 From: Fiona Ebner Date: Thu, 25 Aug 2022 11:29:10 +0200 Subject: [PATCH 051/174] hw/net/vmxnet3: allow VMXNET3_MAX_MTU itself as a value Currently, VMXNET3_MAX_MTU itself (being 9000) is not considered a valid value for the MTU, but a guest running ESXi 7.0 might try to set it and fail the assert [0]. In the Linux kernel, dev->max_mtu itself is a valid value for the MTU and for the vmxnet3 driver it's 9000, so a guest running Linux will also fail the assert when trying to set an MTU of 9000. VMXNET3_MAX_MTU and s->mtu don't seem to be used in relation to buffer allocations/accesses, so allowing the upper limit itself as a value should be fine. [0]: https://forum.proxmox.com/threads/114011/ Fixes: d05dcd94ae ("net: vmxnet3: validate configuration values during activate (CVE-2021-20203)") Signed-off-by: Fiona Ebner Signed-off-by: Jason Wang (cherry picked from commit 099a63828130843741d317cb28e936f468b2b53b) Signed-off-by: Michael Tokarev --- hw/net/vmxnet3.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c index d2ab527ef4..56559cda24 100644 --- a/hw/net/vmxnet3.c +++ b/hw/net/vmxnet3.c @@ -1441,7 +1441,7 @@ static void vmxnet3_activate_device(VMXNET3State *s) vmxnet3_setup_rx_filtering(s); /* Cache fields from shared memory */ s->mtu = VMXNET3_READ_DRV_SHARED32(d, s->drv_shmem, devRead.misc.mtu); - assert(VMXNET3_MIN_MTU <= s->mtu && s->mtu < VMXNET3_MAX_MTU); + assert(VMXNET3_MIN_MTU <= s->mtu && s->mtu <= VMXNET3_MAX_MTU); VMW_CFPRN("MTU is %u", s->mtu); s->max_rx_frags = From a2efa1fac49b7d7d10564ef0007b2ed02e69fdf5 Mon Sep 17 00:00:00 2001 From: Yuval Shaia Date: Sun, 3 Apr 2022 12:52:34 +0300 Subject: [PATCH 052/174] hw/pvrdma: Protect against buggy or malicious guest driver Guest driver might execute HW commands when shared buffers are not yet allocated. This could happen on purpose (malicious guest) or because of some other guest/host address mapping error. We need to protect againts such case. Fixes: CVE-2022-1050 Reported-by: Raven Signed-off-by: Yuval Shaia Message-Id: <20220403095234.2210-1-yuval.shaia.ml@gmail.com> Signed-off-by: Laurent Vivier (cherry picked from commit 31c4b6fb0293e359f9ef8a61892667e76eea4c99) Signed-off-by: Michael Tokarev --- hw/rdma/vmw/pvrdma_cmd.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hw/rdma/vmw/pvrdma_cmd.c b/hw/rdma/vmw/pvrdma_cmd.c index da7ddfa548..89db963c46 100644 --- a/hw/rdma/vmw/pvrdma_cmd.c +++ b/hw/rdma/vmw/pvrdma_cmd.c @@ -796,6 +796,12 @@ int pvrdma_exec_cmd(PVRDMADev *dev) dsr_info = &dev->dsr_info; + if (!dsr_info->dsr) { + /* Buggy or malicious guest driver */ + rdma_error_report("Exec command without dsr, req or rsp buffers"); + goto out; + } + if (dsr_info->req->hdr.cmd >= sizeof(cmd_handlers) / sizeof(struct cmd_handler)) { rdma_error_report("Unsupported command"); From a3c6cd83e32d7729889b3eab2a9b6b4650c56ea9 Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Tue, 14 Feb 2023 15:10:56 +0100 Subject: [PATCH 053/174] target/s390x/arch_dump: Fix memory corruption in s390x_write_elf64_notes() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "note_size" can be smaller than sizeof(note), so unconditionally calling memset(notep, 0, sizeof(note)) could cause a memory corruption here in case notep has been allocated dynamically, thus let's use note_size as length argument for memset() instead. Reported-by: Sebastian Mitterle Fixes: 113d8f4e95 ("s390x: pv: Add dump support") Message-Id: <20230214141056.680969-1-thuth@redhat.com> Reviewed-by: Janosch Frank Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: Thomas Huth (cherry picked from commit eb60026120081430d554c9cabaa36c4ac271fce0) Signed-off-by: Michael Tokarev --- target/s390x/arch_dump.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/s390x/arch_dump.c b/target/s390x/arch_dump.c index a2329141e8..a7c44ba49d 100644 --- a/target/s390x/arch_dump.c +++ b/target/s390x/arch_dump.c @@ -248,7 +248,7 @@ static int s390x_write_elf64_notes(const char *note_name, notep = g_malloc(note_size); } - memset(notep, 0, sizeof(note)); + memset(notep, 0, note_size); /* Setup note header data */ notep->hdr.n_descsz = cpu_to_be32(content_size); From 17b032c6598ea756889f25e8d3e4cd9f2036669b Mon Sep 17 00:00:00 2001 From: Nina Schoetterl-Glausch Date: Fri, 10 Mar 2023 12:41:56 +0100 Subject: [PATCH 054/174] target/s390x: Fix emulation of C(G)HRL The second operand of COMPARE HALFWORD RELATIVE LONG is a signed halfword, it does not have the same size as the first operand. Fixes: a7e836d5eb ("target-s390: Convert COMPARE, COMPARE LOGICAL") Signed-off-by: Nina Schoetterl-Glausch Reviewed-by: Richard Henderson Reviewed-by: David Hildenbrand Message-Id: <20230310114157.3024170-2-nsg@linux.ibm.com> Signed-off-by: Thomas Huth (cherry picked from commit 54fce97cfcaf5463ee5f325bc1f1d4adc2772f38) Signed-off-by: Michael Tokarev --- target/s390x/tcg/insn-data.h.inc | 4 ++-- target/s390x/tcg/translate.c | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/target/s390x/tcg/insn-data.h.inc b/target/s390x/tcg/insn-data.h.inc index 54d4250c9f..2a5fc99818 100644 --- a/target/s390x/tcg/insn-data.h.inc +++ b/target/s390x/tcg/insn-data.h.inc @@ -199,8 +199,8 @@ C(0xe55c, CHSI, SIL, GIE, m1_32s, i2, 0, 0, 0, cmps64) C(0xe558, CGHSI, SIL, GIE, m1_64, i2, 0, 0, 0, cmps64) /* COMPARE HALFWORD RELATIVE LONG */ - C(0xc605, CHRL, RIL_b, GIE, r1_o, mri2_32s, 0, 0, 0, cmps32) - C(0xc604, CGHRL, RIL_b, GIE, r1_o, mri2_64, 0, 0, 0, cmps64) + C(0xc605, CHRL, RIL_b, GIE, r1_o, mri2_16s, 0, 0, 0, cmps32) + C(0xc604, CGHRL, RIL_b, GIE, r1_o, mri2_16s, 0, 0, 0, cmps64) /* COMPARE HIGH */ C(0xb9cd, CHHR, RRE, HW, r1_sr32, r2_sr32, 0, 0, 0, cmps32) C(0xb9dd, CHLR, RRE, HW, r1_sr32, r2_o, 0, 0, 0, cmps32) diff --git a/target/s390x/tcg/translate.c b/target/s390x/tcg/translate.c index 1e599ac259..9c3ee5ed72 100644 --- a/target/s390x/tcg/translate.c +++ b/target/s390x/tcg/translate.c @@ -6050,6 +6050,13 @@ static void in2_m2_64a(DisasContext *s, DisasOps *o) #define SPEC_in2_m2_64a 0 #endif +static void in2_mri2_16s(DisasContext *s, DisasOps *o) +{ + o->in2 = tcg_temp_new_i64(); + tcg_gen_qemu_ld16s(o->in2, gen_ri2(s), get_mem_index(s)); +} +#define SPEC_in2_mri2_16s 0 + static void in2_mri2_16u(DisasContext *s, DisasOps *o) { in2_ri2(s, o); From ad2f459ce03bb9cb1f3c577f5503c8861f777ba1 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Sun, 26 Feb 2023 17:55:31 -1000 Subject: [PATCH 055/174] target/s390x: Split out gen_ri2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use tcg_constant_i64. Adjust in2_mri2_* to allocate a new temporary for the output, using gen_ri2 for the address. Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: Richard Henderson (cherry picked from commit bdbc87e323ee417735141ed2b11dab0091b57593) Signed-off-by: Michael Tokarev --- target/s390x/tcg/translate.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/target/s390x/tcg/translate.c b/target/s390x/tcg/translate.c index 9c3ee5ed72..ab60b51e31 100644 --- a/target/s390x/tcg/translate.c +++ b/target/s390x/tcg/translate.c @@ -5962,9 +5962,14 @@ static void in2_a2(DisasContext *s, DisasOps *o) } #define SPEC_in2_a2 0 +static TCGv gen_ri2(DisasContext *s) +{ + return tcg_constant_i64(s->base.pc_next + (int64_t)get_field(s, i2) * 2); +} + static void in2_ri2(DisasContext *s, DisasOps *o) { - o->in2 = tcg_const_i64(s->base.pc_next + (int64_t)get_field(s, i2) * 2); + o->in2 = gen_ri2(s); } #define SPEC_in2_ri2 0 @@ -6059,29 +6064,29 @@ static void in2_mri2_16s(DisasContext *s, DisasOps *o) static void in2_mri2_16u(DisasContext *s, DisasOps *o) { - in2_ri2(s, o); - tcg_gen_qemu_ld16u(o->in2, o->in2, get_mem_index(s)); + o->in2 = tcg_temp_new_i64(); + tcg_gen_qemu_ld16u(o->in2, gen_ri2(s), get_mem_index(s)); } #define SPEC_in2_mri2_16u 0 static void in2_mri2_32s(DisasContext *s, DisasOps *o) { - in2_ri2(s, o); - tcg_gen_qemu_ld32s(o->in2, o->in2, get_mem_index(s)); + o->in2 = tcg_temp_new_i64(); + tcg_gen_qemu_ld32s(o->in2, gen_ri2(s), get_mem_index(s)); } #define SPEC_in2_mri2_32s 0 static void in2_mri2_32u(DisasContext *s, DisasOps *o) { - in2_ri2(s, o); - tcg_gen_qemu_ld32u(o->in2, o->in2, get_mem_index(s)); + o->in2 = tcg_temp_new_i64(); + tcg_gen_qemu_ld32u(o->in2, gen_ri2(s), get_mem_index(s)); } #define SPEC_in2_mri2_32u 0 static void in2_mri2_64(DisasContext *s, DisasOps *o) { - in2_ri2(s, o); - tcg_gen_qemu_ld64(o->in2, o->in2, get_mem_index(s)); + o->in2 = tcg_temp_new_i64(); + tcg_gen_qemu_ld64(o->in2, gen_ri2(s), get_mem_index(s)); } #define SPEC_in2_mri2_64 0 From 5d42bf6c574dcb174689fb837552c6f228db9cf3 Mon Sep 17 00:00:00 2001 From: Ilya Leoshkevich Date: Thu, 16 Mar 2023 22:07:50 +0100 Subject: [PATCH 056/174] target/s390x: Fix EXECUTE of relative long instructions The code uses the wrong base for relative addressing: it should use the target instruction address and not the EXECUTE's address. Fix by storing the target instruction address in the new CPUS390XState member and loading it from the code generated by gen_ri2(). Reported-by: Nina Schoetterl-Glausch Signed-off-by: Ilya Leoshkevich Reviewed-by: Richard Henderson Reviewed-by: David Hildenbrand Message-Id: <20230316210751.302423-2-iii@linux.ibm.com> Signed-off-by: Thomas Huth (cherry picked from commit 703d03a4aaf38f285555ef5422ba5ce075416fc4) Signed-off-by: Michael Tokarev --- target/s390x/cpu.h | 1 + target/s390x/tcg/mem_helper.c | 1 + target/s390x/tcg/translate.c | 13 ++++++++++++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h index 7d6d01325b..8aaf8dd5a3 100644 --- a/target/s390x/cpu.h +++ b/target/s390x/cpu.h @@ -87,6 +87,7 @@ struct CPUArchState { uint64_t cc_vr; uint64_t ex_value; + uint64_t ex_target; uint64_t __excp_addr; uint64_t psa; diff --git a/target/s390x/tcg/mem_helper.c b/target/s390x/tcg/mem_helper.c index 3758b9e688..7e7de5e2f1 100644 --- a/target/s390x/tcg/mem_helper.c +++ b/target/s390x/tcg/mem_helper.c @@ -2618,6 +2618,7 @@ void HELPER(ex)(CPUS390XState *env, uint32_t ilen, uint64_t r1, uint64_t addr) that ex_value is non-zero, which flags that we are in a state that requires such execution. */ env->ex_value = insn | ilen; + env->ex_target = addr; } uint32_t HELPER(mvcos)(CPUS390XState *env, uint64_t dest, uint64_t src, diff --git a/target/s390x/tcg/translate.c b/target/s390x/tcg/translate.c index ab60b51e31..e328aa5b97 100644 --- a/target/s390x/tcg/translate.c +++ b/target/s390x/tcg/translate.c @@ -5964,7 +5964,18 @@ static void in2_a2(DisasContext *s, DisasOps *o) static TCGv gen_ri2(DisasContext *s) { - return tcg_constant_i64(s->base.pc_next + (int64_t)get_field(s, i2) * 2); + int64_t delta = (int64_t)get_field(s, i2) * 2; + TCGv ri2; + + if (unlikely(s->ex_value)) { + ri2 = tcg_temp_new_i64(); + tcg_gen_ld_i64(ri2, cpu_env, offsetof(CPUS390XState, ex_target)); + tcg_gen_addi_i64(ri2, ri2, delta); + } else { + ri2 = tcg_constant_i64(s->base.pc_next + delta); + } + + return ri2; } static void in2_ri2(DisasContext *s, DisasOps *o) From d8592b05becfeea4da2c71b79ea3d9a7ef8cfe50 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Mon, 3 Apr 2023 16:12:30 +0100 Subject: [PATCH 057/174] hw/arm: do not free machine->fdt in arm_load_dtb() At this moment, arm_load_dtb() can free machine->fdt when binfo->dtb_filename is NULL. If there's no 'dtb_filename', 'fdt' will be retrieved by binfo->get_dtb(). If get_dtb() returns machine->fdt, as is the case of machvirt_dtb() from hw/arm/virt.c, fdt now has a pointer to machine->fdt. And, in that case, the existing g_free(fdt) at the end of arm_load_dtb() will make machine->fdt point to an invalid memory region. Since monitor command 'dumpdtb' was introduced a couple of releases ago, running it with any ARM machine that uses arm_load_dtb() will crash QEMU. Let's enable all arm_load_dtb() callers to use dumpdtb properly. Instead of freeing 'fdt', assign it back to ms->fdt. Cc: Peter Maydell Cc: qemu-arm@nongnu.org Fixes: bf353ad55590f ("qmp/hmp, device_tree.c: introduce dumpdtb") Reported-by: Markus Armbruster Signed-off-by: Daniel Henrique Barboza Signed-off-by: Markus Armbruster Reviewed-by: Daniel Henrique Barboza Message-id: 20230328165935.1512846-1-armbru@redhat.com Signed-off-by: Peter Maydell (cherry picked from commit 12148d442ec3f4386c8624ffcf44c61a8b344018) Signed-off-by: Michael Tokarev --- hw/arm/boot.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hw/arm/boot.c b/hw/arm/boot.c index 15c2bf1867..725bab8adc 100644 --- a/hw/arm/boot.c +++ b/hw/arm/boot.c @@ -686,7 +686,10 @@ int arm_load_dtb(hwaddr addr, const struct arm_boot_info *binfo, qemu_register_reset_nosnapshotload(qemu_fdt_randomize_seeds, rom_ptr_for_as(as, addr, size)); - g_free(fdt); + if (fdt != ms->fdt) { + g_free(ms->fdt); + ms->fdt = fdt; + } return size; From 248aa3deb68a327a9450b536fab8e03a4ed89918 Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Thu, 23 Mar 2023 10:48:59 -0400 Subject: [PATCH 058/174] aio-posix: fix race between epoll upgrade and aio_set_fd_handler() If another thread calls aio_set_fd_handler() while the IOThread event loop is upgrading from ppoll(2) to epoll(7) then we might miss new AioHandlers. The epollfd will not monitor the new AioHandler's fd, resulting in hangs. Take the AioHandler list lock while upgrading to epoll. This prevents AioHandlers from changing while epoll is being set up. If we cannot lock because we're in a nested event loop, then don't upgrade to epoll (it will happen next time we're not in a nested call). The downside to taking the lock is that the aio_set_fd_handler() thread has to wait until the epoll upgrade is finished, which involves many epoll_ctl(2) system calls. However, this scenario is rare and I couldn't think of another solution that is still simple. Reported-by: Qing Wang Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=2090998 Cc: Paolo Bonzini Cc: Fam Zheng Signed-off-by: Stefan Hajnoczi Message-Id: <20230323144859.1338495-1-stefanha@redhat.com> Reviewed-by: Kevin Wolf Signed-off-by: Kevin Wolf (cherry picked from commit e62da98527fa35fe5f532cded01a33edf9fbe7b2) Signed-off-by: Michael Tokarev --- util/fdmon-epoll.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/util/fdmon-epoll.c b/util/fdmon-epoll.c index e11a8a022e..1683aa1105 100644 --- a/util/fdmon-epoll.c +++ b/util/fdmon-epoll.c @@ -127,6 +127,8 @@ static bool fdmon_epoll_try_enable(AioContext *ctx) bool fdmon_epoll_try_upgrade(AioContext *ctx, unsigned npfd) { + bool ok; + if (ctx->epollfd < 0) { return false; } @@ -136,14 +138,23 @@ bool fdmon_epoll_try_upgrade(AioContext *ctx, unsigned npfd) return false; } - if (npfd >= EPOLL_ENABLE_THRESHOLD) { - if (fdmon_epoll_try_enable(ctx)) { - return true; - } else { - fdmon_epoll_disable(ctx); - } + if (npfd < EPOLL_ENABLE_THRESHOLD) { + return false; } - return false; + + /* The list must not change while we add fds to epoll */ + if (!qemu_lockcnt_dec_if_lock(&ctx->list_lock)) { + return false; + } + + ok = fdmon_epoll_try_enable(ctx); + + qemu_lockcnt_inc_and_unlock(&ctx->list_lock); + + if (!ok) { + fdmon_epoll_disable(ctx); + } + return ok; } void fdmon_epoll_setup(AioContext *ctx) From 5d4218f0b22812b37662f29a5c33619823f948e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Date: Tue, 21 Mar 2023 17:16:08 +0100 Subject: [PATCH 059/174] target/s390x: Fix float_comp_to_cc() prototype MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GCC13 reports an error : ../target/s390x/tcg/fpu_helper.c:123:5: error: conflicting types for ‘float_comp_to_cc’ due to enum/integer mismatch; have ‘int(CPUS390XState *, FloatRelation)’ {aka ‘int(struct CPUArchState *, FloatRelation)’} [-Werror=enum-int-mismatch] 123 | int float_comp_to_cc(CPUS390XState *env, FloatRelation float_compare) | ^~~~~~~~~~~~~~~~ In file included from ../target/s390x/tcg/fpu_helper.c:23: ../target/s390x/s390x-internal.h:302:5: note: previous declaration of ‘float_comp_to_cc’ with type ‘int(CPUS390XState *, int)’ {aka ‘int(struct CPUArchState *, int)’} 302 | int float_comp_to_cc(CPUS390XState *env, int float_compare); | ^~~~~~~~~~~~~~~~ Fixes: 71bfd65c5f ("softfloat: Name compare relation enum") Signed-off-by: Cédric Le Goater Reviewed-by: Philippe Mathieu-Daudé Message-Id: <20230321161609.716474-3-clg@kaod.org> Reviewed-by: Richard Henderson Reviewed-by: Thomas Huth Signed-off-by: Thomas Huth (cherry picked from commit f79283fdb8efca0cd6e818bebad12f367e83f6e6) Signed-off-by: Michael Tokarev --- target/s390x/s390x-internal.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/target/s390x/s390x-internal.h b/target/s390x/s390x-internal.h index 5d4361d35b..825252d728 100644 --- a/target/s390x/s390x-internal.h +++ b/target/s390x/s390x-internal.h @@ -11,6 +11,7 @@ #define S390X_INTERNAL_H #include "cpu.h" +#include "fpu/softfloat.h" #ifndef CONFIG_USER_ONLY typedef struct LowCore { @@ -299,7 +300,7 @@ uint32_t set_cc_nz_f128(float128 v); uint8_t s390_softfloat_exc_to_ieee(unsigned int exc); int s390_swap_bfp_rounding_mode(CPUS390XState *env, int m3); void s390_restore_bfp_rounding_mode(CPUS390XState *env, int old_mode); -int float_comp_to_cc(CPUS390XState *env, int float_compare); +int float_comp_to_cc(CPUS390XState *env, FloatRelation float_compare); #define DCMASK_ZERO 0x0c00 #define DCMASK_NORMAL 0x0300 From a3f531cee66b12041098f7a809c2a7d6ecb6ad7d Mon Sep 17 00:00:00 2001 From: Pierrick Bouvier Date: Tue, 21 Feb 2023 16:30:05 +0100 Subject: [PATCH 060/174] qga/vss-win32: fix warning for clang++-15 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reported when compiling with clang-windows-arm64. ../qga/vss-win32/install.cpp:537:9: error: variable 'hr' is used uninitialized whenever 'if' condition is false [-Werror,-Wsometimes-uninitialized] if (!(ControlService(service, SERVICE_CONTROL_STOP, NULL))) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../qga/vss-win32/install.cpp:545:12: note: uninitialized use occurs here return hr; ^~ Signed-off-by: Pierrick Bouvier Fixes: 917ebcb170 ("qga-win: Fix QGA VSS Provider service stop failure") Reviewed-by: Konstantin Kostiuk Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: Kostiantyn Kostiuk (cherry picked from commit 0fcd574b025fccdf14d5140687cafe2bc30b634f) Signed-off-by: Michael Tokarev --- qga/vss-win32/install.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qga/vss-win32/install.cpp b/qga/vss-win32/install.cpp index b57508fbe0..b8087e5baa 100644 --- a/qga/vss-win32/install.cpp +++ b/qga/vss-win32/install.cpp @@ -518,7 +518,7 @@ namespace _com_util /* Stop QGA VSS provider service using Winsvc API */ STDAPI StopService(void) { - HRESULT hr; + HRESULT hr = S_OK; SC_HANDLE manager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); SC_HANDLE service = NULL; From c74cba83622a306bd9af18adf19edb8c72d8be3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Date: Mon, 20 Feb 2023 11:22:51 +0400 Subject: [PATCH 061/174] ui: fix crash on serial reset, during init MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For ex, when resetting the xlnx-zcu102 machine: (lldb) bt * thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x50) * frame #0: 0x10020a740 gd_vc_send_chars(vc=0x000000000) at gtk.c:1759:41 [opt] frame #1: 0x100636264 qemu_chr_fe_accept_input(be=) at char-fe.c:159:9 [opt] frame #2: 0x1000608e0 cadence_uart_reset_hold [inlined] uart_rx_reset(s=0x10810a960) at cadence_uart.c:158:5 [opt] frame #3: 0x1000608d4 cadence_uart_reset_hold(obj=0x10810a960) at cadence_uart.c:530:5 [opt] frame #4: 0x100580ab4 resettable_phase_hold(obj=0x10810a960, opaque=0x000000000, type=) at resettable.c:0 [opt] frame #5: 0x10057d1b0 bus_reset_child_foreach(obj=, cb=(resettable_phase_hold at resettable.c:162), opaque=0x000000000, type=RESET_TYPE_COLD) at bus.c:97:13 [opt] frame #6: 0x1005809f8 resettable_phase_hold [inlined] resettable_child_foreach(rc=0x000060000332d2c0, obj=0x0000600002c1c180, cb=, opaque=0x000000000, type=RESET_TYPE_COLD) at resettable.c:96:9 [opt] frame #7: 0x1005809d8 resettable_phase_hold(obj=0x0000600002c1c180, opaque=0x000000000, type=RESET_TYPE_COLD) at resettable.c:173:5 [opt] frame #8: 0x1005803a0 resettable_assert_reset(obj=0x0000600002c1c180, type=) at resettable.c:60:5 [opt] frame #9: 0x10058027c resettable_reset(obj=0x0000600002c1c180, type=RESET_TYPE_COLD) at resettable.c:45:5 [opt] While the chardev is created early, the VirtualConsole is associated after, during qemu_init_displays(). Signed-off-by: Marc-André Lureau Tested-by: Philippe Mathieu-Daudé Reviewed-by: Philippe Mathieu-Daudé Message-Id: <20230220072251.3385878-1-marcandre.lureau@redhat.com> (cherry picked from commit 49152ac47003ca21fc6f2a5c3e517f79649e1541) Signed-off-by: Michael Tokarev --- ui/gtk.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ui/gtk.c b/ui/gtk.c index 4817623c8f..dfaf6d33c3 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -1783,7 +1783,9 @@ static void gd_vc_chr_accept_input(Chardev *chr) VCChardev *vcd = VC_CHARDEV(chr); VirtualConsole *vc = vcd->console; - gd_vc_send_chars(vc); + if (vc) { + gd_vc_send_chars(vc); + } } static void gd_vc_chr_set_echo(Chardev *chr, bool echo) From d9bb73d8e3a02135a34b2b7d7ba8f8e1e660a1e5 Mon Sep 17 00:00:00 2001 From: Bernhard Beschow Date: Sat, 18 Mar 2023 19:59:31 +0100 Subject: [PATCH 062/174] qemu/osdep: Switch position of "extern" and "G_NORETURN" Fixes the Windows build under msys2 using GCC 12 which fails with the following error: [184/579] Compiling C++ object qga/vss-win32/qga-vss.dll.p/install.cpp.obj FAILED: qga/vss-win32/qga-vss.dll.p/install.cpp.obj "c++" "-m64" "-mcx16" "-Iqga/vss-win32/qga-vss.dll.p" "-Iqga/vss-win32" "-I../src/qga/vss-win32" "-I." "-Iqapi" "-Itrace" "-Iui" "-Iui/shader" "-IC:/msys64/mingw64/include/glib-2.0" "-IC:/msys64/mingw64/lib/glib-2.0/include" "-fdiagnostics-color=auto" "-Wall" "-Winvalid-pch" "-Wnon-virtual-dtor" "-Werror" "-std=gnu++11" "-g" "-iquote" "." "-iquote" "C:/msys64/home/shentey/Projects/qemu/src" "-iquote" "C:/msys64/home/shentey/Projects/qemu/src/include" "-iquote" "C:/msys64/home/shentey/Projects/qemu/src/tcg/i386" "-D__STDC_LIMIT_MACROS" "-D__STDC_CONSTANT_MACROS" "-D__STDC_FORMAT_MACROS" "-fno-pie" "-no-pie" "-D_GNU_SOURCE" "-D_FILE_OFFSET_BITS=64" "-D_LARGEFILE_SOURCE" "-fno-strict-aliasing" "-fno-common" "-fwrapv" "-Wundef" "-Wwrite-strings" "-Wtype-limits" "-Wformat-security" "-Wformat-y2k" "-Winit-self" "-Wignored-qualifiers" "-Wempty-body" "-Wendif-labels" "-Wexpansion-to-defined" "-Wimplicit-fallthrough=2" "-Wmissing-format-attribute" "-Wno-missing-include-dirs" "-Wno-shift-negative-value" "-Wno-psabi" "-fstack-protector-strong" "-Wno-unknown-pragmas" "-Wno-delete-non-virtual-dtor" "-Wno-non-virtual-dtor" -MD -MQ qga/vss-win32/qga-vss.dll.p/install.cpp.obj -MF "qga/vss-win32/qga-vss.dll.p/install.cpp.obj.d" -o qga/vss-win32/qga-vss.dll.p/install.cpp.obj "-c" ../src/qga/vss-win32/install.cpp In file included from C:/msys64/mingw64/lib/glib-2.0/include/glibconfig.h:9, from C:/msys64/mingw64/include/glib-2.0/glib/gtypes.h:34, from C:/msys64/mingw64/include/glib-2.0/glib/galloca.h:34, from C:/msys64/mingw64/include/glib-2.0/glib.h:32, from C:/msys64/home/shentey/Projects/qemu/src/include/glib-compat.h:32, from C:/msys64/home/shentey/Projects/qemu/src/include/qemu/osdep.h:144, from ../src/qga/vss-win32/install.cpp:13: C:/msys64/mingw64/include/glib-2.0/glib/gmacros.h:1075:21: error: standard attributes in middle of decl-specifiers 1075 | # define G_NORETURN [[noreturn]] | ^ C:/msys64/home/shentey/Projects/qemu/src/include/qemu/osdep.h:240:8: note: in expansion of macro 'G_NORETURN' 240 | extern G_NORETURN | ^~~~~~~~~~ C:/msys64/mingw64/include/glib-2.0/glib/gmacros.h:1075:21: note: standard attributes must precede the decl-specifiers to apply to the declaration, or follow them to apply to the type 1075 | # define G_NORETURN [[noreturn]] | ^ C:/msys64/home/shentey/Projects/qemu/src/include/qemu/osdep.h:240:8: note: in expansion of macro 'G_NORETURN' 240 | extern G_NORETURN | ^~~~~~~~~~ C:/msys64/mingw64/include/glib-2.0/glib/gmacros.h:1075:21: error: attribute ignored [-Werror=attributes] 1075 | # define G_NORETURN [[noreturn]] | ^ C:/msys64/home/shentey/Projects/qemu/src/include/qemu/osdep.h:240:8: note: in expansion of macro 'G_NORETURN' 240 | extern G_NORETURN | ^~~~~~~~~~ C:/msys64/mingw64/include/glib-2.0/glib/gmacros.h:1075:21: note: an attribute that appertains to a type-specifier is ignored 1075 | # define G_NORETURN [[noreturn]] | ^ C:/msys64/home/shentey/Projects/qemu/src/include/qemu/osdep.h:240:8: note: in expansion of macro 'G_NORETURN' 240 | extern G_NORETURN | ^~~~~~~~~~ cc1plus.exe: all warnings being treated as errors Apparently it also fixes the compilation with Clang 15 (see https://gitlab.com/qemu-project/qemu/-/issues/1541 ). Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1541 Signed-off-by: Bernhard Beschow Message-Id: <20230318185931.181659-1-shentey@gmail.com> Reviewed-by: Peter Maydell Signed-off-by: Thomas Huth (cherry picked from commit 5cb993ff131fca2abef3ce074a20258fd6fce557) Signed-off-by: Michael Tokarev --- include/qemu/osdep.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h index b9c4307779..3d6cb431ad 100644 --- a/include/qemu/osdep.h +++ b/include/qemu/osdep.h @@ -177,7 +177,7 @@ extern "C" { * supports QEMU_ERROR, this will be reported at compile time; otherwise * this will be reported at link time due to the missing symbol. */ -extern G_NORETURN +G_NORETURN extern void QEMU_ERROR("code path is reachable") qemu_build_not_reached_always(void); #if defined(__OPTIMIZE__) && !defined(__NO_INLINE__) From b57641e907acadd7593e0fec4ef52a21c9864aa7 Mon Sep 17 00:00:00 2001 From: Mathis Marion Date: Tue, 7 Mar 2023 16:42:55 +0100 Subject: [PATCH 063/174] linux-user: fix sockaddr_in6 endianness MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The sin6_scope_id field uses the host byte order, so there is a conversion to be made when host and target endianness differ. Signed-off-by: Mathis Marion Reviewed-by: Laurent Vivier Reviewed-by: Philippe Mathieu-Daudé Message-Id: <20230307154256.101528-2-Mathis.Marion@silabs.com> Signed-off-by: Laurent Vivier (cherry picked from commit 44cf6731d6b9a48bcd57392e8cd6f0f712aaa677) Signed-off-by: Michael Tokarev --- linux-user/syscall.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 24b25759be..106d5ed05b 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -1755,6 +1755,11 @@ static inline abi_long target_to_host_sockaddr(int fd, struct sockaddr *addr, lladdr = (struct target_sockaddr_ll *)addr; lladdr->sll_ifindex = tswap32(lladdr->sll_ifindex); lladdr->sll_hatype = tswap16(lladdr->sll_hatype); + } else if (sa_family == AF_INET6) { + struct sockaddr_in6 *in6addr; + + in6addr = (struct sockaddr_in6 *)addr; + in6addr->sin6_scope_id = tswap32(in6addr->sin6_scope_id); } unlock_user(target_saddr, target_addr, 0); From b6abbe6250a140d6f4b779f04c95e79a0f0aeffa Mon Sep 17 00:00:00 2001 From: Ilya Leoshkevich Date: Fri, 24 Feb 2023 01:39:06 +0100 Subject: [PATCH 064/174] linux-user: Fix unaligned memory access in prlimit64 syscall MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit target_rlimit64 contains uint64_t fields, so it's 8-byte aligned on some hosts, while some guests may align their respective type on a 4-byte boundary. This may lead to an unaligned access, which is an UB. Fix by defining the fields as abi_ullong. This makes the host alignment match that of the guest, and lets the compiler know that it should emit code that can deal with the guest alignment. While at it, also use __get_user() and __put_user() instead of tswap64(). Fixes: 163a05a8398b ("linux-user: Implement prlimit64 syscall") Reported-by: Richard Henderson Signed-off-by: Ilya Leoshkevich Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Laurent Vivier Message-Id: <20230224003907.263914-2-iii@linux.ibm.com> Signed-off-by: Laurent Vivier (cherry picked from commit 9c1da8b5ee7f6e80e6b683e7fb73df1029a7cbbe) Signed-off-by: Michael Tokarev --- linux-user/generic/target_resource.h | 4 ++-- linux-user/syscall.c | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/linux-user/generic/target_resource.h b/linux-user/generic/target_resource.h index 539d8c4677..37d3eb09b3 100644 --- a/linux-user/generic/target_resource.h +++ b/linux-user/generic/target_resource.h @@ -12,8 +12,8 @@ struct target_rlimit { }; struct target_rlimit64 { - uint64_t rlim_cur; - uint64_t rlim_max; + abi_ullong rlim_cur; + abi_ullong rlim_max; }; #define TARGET_RLIM_INFINITY ((abi_ulong)-1) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 106d5ed05b..8f8f8cf1db 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -12888,8 +12888,8 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1, if (!lock_user_struct(VERIFY_READ, target_rnew, arg3, 1)) { return -TARGET_EFAULT; } - rnew.rlim_cur = tswap64(target_rnew->rlim_cur); - rnew.rlim_max = tswap64(target_rnew->rlim_max); + __get_user(rnew.rlim_cur, &target_rnew->rlim_cur); + __get_user(rnew.rlim_max, &target_rnew->rlim_max); unlock_user_struct(target_rnew, arg3, 0); rnewp = &rnew; } @@ -12899,8 +12899,8 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1, if (!lock_user_struct(VERIFY_WRITE, target_rold, arg4, 1)) { return -TARGET_EFAULT; } - target_rold->rlim_cur = tswap64(rold.rlim_cur); - target_rold->rlim_max = tswap64(rold.rlim_max); + __put_user(rold.rlim_cur, &target_rold->rlim_cur); + __put_user(rold.rlim_max, &target_rold->rlim_max); unlock_user_struct(target_rold, arg4, 1); } return ret; From 73a11e3723a157df669888fc89c4e776d5fcc8ee Mon Sep 17 00:00:00 2001 From: Mathis Marion Date: Mon, 20 Feb 2023 09:58:19 +0100 Subject: [PATCH 065/174] linux-user: fix timerfd read endianness conversion When reading the expiration count from a timerfd, the endianness of the 64bit value read is the one of the host, just as for eventfds. Signed-off-by: Mathis Marion Reviewed-by: Laurent Vivier Message-Id: <20230220085822.626798-2-Mathis.Marion@silabs.com> Signed-off-by: Laurent Vivier (cherry picked from commit d759a62b122dcdf76d6ea10c56c5dff1d04d731d) Signed-off-by: Michael Tokarev --- linux-user/fd-trans.c | 10 +++++++--- linux-user/fd-trans.h | 1 + linux-user/syscall.c | 8 ++++++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/linux-user/fd-trans.c b/linux-user/fd-trans.c index 7b25468d02..146aaaafaa 100644 --- a/linux-user/fd-trans.c +++ b/linux-user/fd-trans.c @@ -1622,7 +1622,7 @@ TargetFdTrans target_signalfd_trans = { .host_to_target_data = host_to_target_data_signalfd, }; -static abi_long swap_data_eventfd(void *buf, size_t len) +static abi_long swap_data_u64(void *buf, size_t len) { uint64_t *counter = buf; int i; @@ -1640,8 +1640,12 @@ static abi_long swap_data_eventfd(void *buf, size_t len) } TargetFdTrans target_eventfd_trans = { - .host_to_target_data = swap_data_eventfd, - .target_to_host_data = swap_data_eventfd, + .host_to_target_data = swap_data_u64, + .target_to_host_data = swap_data_u64, +}; + +TargetFdTrans target_timerfd_trans = { + .host_to_target_data = swap_data_u64, }; #if defined(CONFIG_INOTIFY) && (defined(TARGET_NR_inotify_init) || \ diff --git a/linux-user/fd-trans.h b/linux-user/fd-trans.h index 1b9fa2041c..910faaf237 100644 --- a/linux-user/fd-trans.h +++ b/linux-user/fd-trans.h @@ -130,6 +130,7 @@ extern TargetFdTrans target_netlink_route_trans; extern TargetFdTrans target_netlink_audit_trans; extern TargetFdTrans target_signalfd_trans; extern TargetFdTrans target_eventfd_trans; +extern TargetFdTrans target_timerfd_trans; #if (defined(TARGET_NR_inotify_init) && defined(__NR_inotify_init)) || \ (defined(CONFIG_INOTIFY1) && defined(TARGET_NR_inotify_init1) && \ defined(__NR_inotify_init1)) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 8f8f8cf1db..9ca30149d4 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -13120,8 +13120,12 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1, #if defined(TARGET_NR_timerfd_create) && defined(CONFIG_TIMERFD) case TARGET_NR_timerfd_create: - return get_errno(timerfd_create(arg1, - target_to_host_bitmask(arg2, fcntl_flags_tbl))); + ret = get_errno(timerfd_create(arg1, + target_to_host_bitmask(arg2, fcntl_flags_tbl))); + if (ret >= 0) { + fd_trans_register(ret, &target_timerfd_trans); + } + return ret; #endif #if defined(TARGET_NR_timerfd_gettime) && defined(CONFIG_TIMERFD) From dda57509e91d9d329fe11f2a3390ef38e2a86139 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Mon, 27 Feb 2023 12:58:29 -1000 Subject: [PATCH 066/174] target/arm: Handle m-profile in arm_is_secure Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1421 Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20230227225832.816605-2-richard.henderson@linaro.org Signed-off-by: Peter Maydell (cherry picked from commit 9094f9551df849f68d40236092d8af3ed869d093) Signed-off-by: Michael Tokarev --- target/arm/cpu.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 9aeed3c848..a9cd7178f8 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -2407,6 +2407,9 @@ static inline bool arm_is_el3_or_mon(CPUARMState *env) /* Return true if the processor is in secure state */ static inline bool arm_is_secure(CPUARMState *env) { + if (arm_feature(env, ARM_FEATURE_M)) { + return env->v7m.secure; + } if (arm_is_el3_or_mon(env)) { return true; } From 3218890da457ee17b3b49b8c2451130ed808cb79 Mon Sep 17 00:00:00 2001 From: Peter Xu Date: Sun, 26 Mar 2023 13:25:38 -0400 Subject: [PATCH 067/174] io: tls: Inherit QIO_CHANNEL_FEATURE_SHUTDOWN on server side MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TLS iochannel will inherit io_shutdown() from the master ioc, however we missed to do that on the server side. This will e.g. allow qemu_file_shutdown() to work on dest QEMU too for migration. Acked-by: Daniel P. Berrangé Signed-off-by: Peter Xu Reviewed-by: Juan Quintela Signed-off-by: Juan Quintela (cherry picked from commit 86d063fa83901bc8150343ff8b03979fbea392c9) Signed-off-by: Michael Tokarev --- io/channel-tls.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/io/channel-tls.c b/io/channel-tls.c index 4ce890a538..4ce08ccc28 100644 --- a/io/channel-tls.c +++ b/io/channel-tls.c @@ -74,6 +74,9 @@ qio_channel_tls_new_server(QIOChannel *master, ioc = QIO_CHANNEL_TLS(object_new(TYPE_QIO_CHANNEL_TLS)); ioc->master = master; + if (qio_channel_has_feature(master, QIO_CHANNEL_FEATURE_SHUTDOWN)) { + qio_channel_set_feature(QIO_CHANNEL(ioc), QIO_CHANNEL_FEATURE_SHUTDOWN); + } object_ref(OBJECT(master)); ioc->session = qcrypto_tls_session_new( From c22120835295f2bbb7d101f1fa60abb70029be85 Mon Sep 17 00:00:00 2001 From: Klaus Jensen Date: Tue, 11 Apr 2023 20:54:44 +0200 Subject: [PATCH 068/174] hw/nvme: fix memory leak in nvme_dsm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The iocb (and the allocated memory to hold LBA ranges) leaks if reading the LBA ranges fails. Fix this by adding a free and an unref of the iocb. Reported-by: Coverity (CID 1508281) Fixes: d7d1474fd85d ("hw/nvme: reimplement dsm to allow cancellation") Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: Klaus Jensen (cherry picked from commit 4b32319cdacd99be983e1a74128289ef52c5964e) Signed-off-by: Michael Tokarev --- hw/nvme/ctrl.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c index 1d3e058452..749a6938dd 100644 --- a/hw/nvme/ctrl.c +++ b/hw/nvme/ctrl.c @@ -2491,6 +2491,9 @@ static uint16_t nvme_dsm(NvmeCtrl *n, NvmeRequest *req) status = nvme_h2c(n, (uint8_t *)iocb->range, sizeof(NvmeDsmRange) * nr, req); if (status) { + g_free(iocb->range); + qemu_aio_unref(iocb); + return status; } From 2e0e234272a65930743fe4580a500b6bf6782529 Mon Sep 17 00:00:00 2001 From: Lukas Tschoke Date: Sat, 8 Apr 2023 00:11:38 +0200 Subject: [PATCH 069/174] block/vhdx: fix dynamic VHDX BAT corruption The corruption occurs when a BAT entry aligned to 4096 bytes is changed. Specifically, the corruption occurs during the creation of the LOG Data Descriptor. The incorrect behavior involves copying 4088 bytes from the original 4096 bytes aligned offset to `tmp[8..4096]` and then copying the new value for the first BAT entry to the beginning `tmp[0..8]`. This results in all existing BAT entries inside the 4K region being incorrectly moved by 8 bytes and the last entry being lost. This bug did not cause noticeable corruption when only sequentially writing once to an empty dynamic VHDX (e.g. using `qemu-img convert -O vhdx -o subformat=dynamic ...`), but it still resulted in invalid values for the (unused) Sector Bitmap BAT entries. Importantly, this corruption would only become noticeable after the corrupted BAT is re-read from the file. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/727 Cc: qemu-stable@nongnu.org Signed-off-by: Lukas Tschoke Message-Id: <6cfb6d6b-adc5-7772-c8a5-6bae9a0ad668@gmail.com> Reviewed-by: Kevin Wolf Signed-off-by: Kevin Wolf (cherry picked from commit 8af037fe4cfeb88bbcded3122cec2c5be0b90907) Signed-off-by: Michael Tokarev --- block/vhdx-log.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/block/vhdx-log.c b/block/vhdx-log.c index 572582b87b..0866897a85 100644 --- a/block/vhdx-log.c +++ b/block/vhdx-log.c @@ -980,7 +980,7 @@ static int vhdx_log_write(BlockDriverState *bs, BDRVVHDXState *s, sector_write = merged_sector; } else if (i == sectors - 1 && trailing_length) { /* partial sector at the end of the buffer */ - ret = bdrv_pread(bs->file, file_offset, + ret = bdrv_pread(bs->file, file_offset + trailing_length, VHDX_LOG_SECTOR_SIZE - trailing_length, merged_sector + trailing_length, 0); if (ret < 0) { From 161e1f22b8a288f88efa40590faab1bc4c2d86a9 Mon Sep 17 00:00:00 2001 From: Michael Tokarev Date: Sun, 23 Apr 2023 13:06:20 +0300 Subject: [PATCH 070/174] Update version for 7.2.2 release --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index b26a34e470..77f5bec5b2 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -7.2.1 +7.2.2 From bfc532703f3c4f8d2744748c440ca36ce9798ccb Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 30 Mar 2023 14:23:40 +0200 Subject: [PATCH 071/174] vnc: avoid underflow when accessing user-provided address If hostlen is zero, there is a possibility that addrstr[hostlen - 1] underflows and, if a closing bracked is there, hostlen - 2 is passed to g_strndup() on the next line. If websocket==false then addrstr[0] would be a colon, but if websocket==true this could in principle happen. Fix it by checking hostlen. Reported by Coverity. Signed-off-by: Paolo Bonzini (cherry picked from commit 3f9c41c5df9617510d8533cf6588172efb3df34b) Signed-off-by: Michael Tokarev --- ui/vnc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/vnc.c b/ui/vnc.c index 88f55cbf3c..1856d57380 100644 --- a/ui/vnc.c +++ b/ui/vnc.c @@ -3765,7 +3765,7 @@ static int vnc_display_get_address(const char *addrstr, addr->type = SOCKET_ADDRESS_TYPE_INET; inet = &addr->u.inet; - if (addrstr[0] == '[' && addrstr[hostlen - 1] == ']') { + if (hostlen && addrstr[0] == '[' && addrstr[hostlen - 1] == ']') { inet->host = g_strndup(addrstr + 1, hostlen - 2); } else { inet->host = g_strndup(addrstr, hostlen); From 84d5232d9d16541e803ad572ef48e6008677f8ff Mon Sep 17 00:00:00 2001 From: Yang Zhong Date: Thu, 6 Apr 2023 02:40:41 -0400 Subject: [PATCH 072/174] target/i386: Change wrong XFRM value in SGX CPUID leaf MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The previous patch wrongly replaced FEAT_XSAVE_XCR0_{LO|HI} with FEAT_XSAVE_XSS_{LO|HI} in CPUID(EAX=12,ECX=1):{ECX,EDX}. As a result, SGX enclaves only supported SSE and x87 feature (xfrm=0x3). Fixes: 301e90675c3f ("target/i386: Enable support for XSAVES based features") Signed-off-by: Yang Zhong Reviewed-by: Yang Weijiang Reviewed-by: Kai Huang Message-Id: <20230406064041.420039-1-yang.zhong@linux.intel.com> Signed-off-by: Paolo Bonzini (cherry picked from commit 72497cff896fecf74306ed33626c30e43633cdd6) Signed-off-by: Michael Tokarev --- target/i386/cpu.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 22b681ca37..0f71ff9fea 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -5584,8 +5584,8 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, } else { *eax &= env->features[FEAT_SGX_12_1_EAX]; *ebx &= 0; /* ebx reserve */ - *ecx &= env->features[FEAT_XSAVE_XSS_LO]; - *edx &= env->features[FEAT_XSAVE_XSS_HI]; + *ecx &= env->features[FEAT_XSAVE_XCR0_LO]; + *edx &= env->features[FEAT_XSAVE_XCR0_HI]; /* FP and SSE are always allowed regardless of XSAVE/XCR0. */ *ecx |= XSTATE_FP_MASK | XSTATE_SSE_MASK; From e557055653ca315402da4eaa26b64f7b49f211fc Mon Sep 17 00:00:00 2001 From: Igor Mammedov Date: Tue, 18 Apr 2023 11:04:49 +0200 Subject: [PATCH 073/174] acpi: pcihp: allow repeating hot-unplug requests with Q35 using ACPI PCI hotplug by default, user's request to unplug device is ignored when it's issued before guest OS has been booted. And any additional attempt to request device hot-unplug afterwards results in following error: "Device XYZ is already in the process of unplug" arguably it can be considered as a regression introduced by [2], before which it was possible to issue unplug request multiple times. Accept new uplug requests after timeout (1ms). This brings ACPI PCI hotplug on par with native PCIe unplug behavior [1] and allows user to repeat unplug requests at propper times. Set expire timeout to arbitrary 1msec so user won't be able to flood guest with SCI interrupts by calling device_del in tight loop. PS: ACPI spec doesn't mandate what OSPM can do with GPEx.status bits set before it's booted => it's impl. depended. Status bits may be retained (I tested with one Windows version) or cleared (Linux since 2.6 kernel times) during guest's ACPI subsystem initialization. Clearing status bits (though not wrong per se) hides the unplug event from guest, and it's upto user to repeat device_del later when guest is able to handle unplug requests. 1) 18416c62e3 ("pcie: expire pending delete") 2) Fixes: cce8944cc9ef ("qdev-monitor: Forbid repeated device_del") Signed-off-by: Igor Mammedov Acked-by: Gerd Hoffmann CC: mst@redhat.com CC: anisinha@redhat.com CC: jusual@redhat.com CC: kraxel@redhat.com Message-Id: <20230418090449.2155757-1-imammedo@redhat.com> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Reviewed-by: Ani Sinha (cherry picked from commit 0f689cf5ada4d5df5ab95c7f7aa9fc221afa855d) Signed-off-by: Michael Tokarev --- hw/acpi/pcihp.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/hw/acpi/pcihp.c b/hw/acpi/pcihp.c index 84d75e6b84..a2a3738b46 100644 --- a/hw/acpi/pcihp.c +++ b/hw/acpi/pcihp.c @@ -429,6 +429,16 @@ void acpi_pcihp_device_unplug_request_cb(HotplugHandler *hotplug_dev, * acpi_pcihp_eject_slot() when the operation is completed. */ pdev->qdev.pending_deleted_event = true; + /* if unplug was requested before OSPM is initialized, + * linux kernel will clear GPE0.sts[] bits during boot, which effectively + * hides unplug event. And than followup qmp_device_del() calls remain + * blocked by above flag permanently. + * Unblock qmp_device_del() by setting expire limit, so user can + * repeat unplug request later when OSPM has been booted. + */ + pdev->qdev.pending_deleted_expires_ms = + qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL); /* 1 msec */ + s->acpi_pcihp_pci_status[bsel].down |= (1U << slot); acpi_send_event(DEVICE(hotplug_dev), ACPI_PCI_HOTPLUG_STATUS); } From 4e35bd88a547d6f1e0b512dc6530ab65b9310b21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Mon, 24 Apr 2023 10:22:37 +0100 Subject: [PATCH 074/174] qemu-options: finesse the recommendations around -blockdev MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We are a bit premature in recommending -blockdev/-device as the best way to configure block devices. It seems there are times the more human friendly -drive still makes sense especially when -snapshot is involved. Improve the language to hopefully make things clearer. Suggested-by: Michael Tokarev Signed-off-by: Alex Bennée Reviewed-by: Thomas Huth Cc: Markus Armbruster Cc: Kevin Wolf Message-Id: <20230424092249.58552-7-alex.bennee@linaro.org> (cherry picked from commit c1654c3e37c31fb638597efedcd07d071837b78b) Signed-off-by: Michael Tokarev --- qemu-options.hx | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/qemu-options.hx b/qemu-options.hx index 7f99d15b23..e52289479b 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -1140,10 +1140,22 @@ have gone through several iterations as the feature set and complexity of the block layer have grown. Many online guides to QEMU often reference older and deprecated options, which can lead to confusion. -The recommended modern way to describe disks is to use a combination of +The most explicit way to describe disks is to use a combination of ``-device`` to specify the hardware device and ``-blockdev`` to describe the backend. The device defines what the guest sees and the -backend describes how QEMU handles the data. +backend describes how QEMU handles the data. It is the only guaranteed +stable interface for describing block devices and as such is +recommended for management tools and scripting. + +The ``-drive`` option combines the device and backend into a single +command line option which is a more human friendly. There is however no +interface stability guarantee although some older board models still +need updating to work with the modern blockdev forms. + +Older options like ``-hda`` are essentially macros which expand into +``-drive`` options for various drive interfaces. The original forms +bake in a lot of assumptions from the days when QEMU was emulating a +legacy PC, they are not recommended for modern configurations. ERST @@ -1636,6 +1648,14 @@ SRST the raw disk image you use is not written back. You can however force the write back by pressing C-a s (see the :ref:`disk images` chapter in the System Emulation Users Guide). + + .. warning:: + snapshot is incompatible with ``-blockdev`` (instead use qemu-img + to manually create snapshot images to attach to your blockdev). + If you have mixed ``-blockdev`` and ``-drive`` declarations you + can use the 'snapshot' property on your drive declarations + instead of this global option. + ERST DEF("fsdev", HAS_ARG, QEMU_OPTION_fsdev, From 0a65c4588c30416b3cd7eabc0435c6f4c96a44f6 Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Thu, 20 Apr 2023 13:22:56 +0100 Subject: [PATCH 075/174] docs/about/deprecated.rst: Add "since 7.1" tag to dtb-kaslr-seed deprecation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In commit 5242876f37ca we deprecated the dtb-kaslr-seed property of the virt board, but forgot the "since n.n" tag in the documentation of this in deprecated.rst. This deprecation note first appeared in the 7.1 release, so retrospectively add the correct "since 7.1" annotation to it. Signed-off-by: Peter Maydell Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Alex Bennée Message-id: 20230420122256.1023709-1-peter.maydell@linaro.org (cherry picked from commit ac64ebbecf80f6bc764d120f85fe9fa28fbd9e85) Signed-off-by: Michael Tokarev --- docs/about/deprecated.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/about/deprecated.rst b/docs/about/deprecated.rst index 93affe3669..0b26c01da0 100644 --- a/docs/about/deprecated.rst +++ b/docs/about/deprecated.rst @@ -233,8 +233,8 @@ Use the more generic event ``DEVICE_UNPLUG_GUEST_ERROR`` instead. System emulator machines ------------------------ -Arm ``virt`` machine ``dtb-kaslr-seed`` property -'''''''''''''''''''''''''''''''''''''''''''''''' +Arm ``virt`` machine ``dtb-kaslr-seed`` property (since 7.1) +'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' The ``dtb-kaslr-seed`` property on the ``virt`` board has been deprecated; use the new name ``dtb-randomness`` instead. The new name From 32900bff7025d7141380a7c6ff17a5b2c26378fe Mon Sep 17 00:00:00 2001 From: Akihiko Odaki Date: Thu, 20 Apr 2023 10:21:15 +0100 Subject: [PATCH 076/174] target/arm: Initialize debug capabilities only once MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit kvm_arm_init_debug() used to be called several times on a SMP system as kvm_arch_init_vcpu() calls it. Move the call to kvm_arch_init() to make sure it will be called only once; otherwise it will overwrite pointers to memory allocated with the previous call and leak it. Fixes: e4482ab7e3 ("target-arm: kvm - add support for HW assisted debug") Suggested-by: Philippe Mathieu-Daudé Signed-off-by: Akihiko Odaki Message-id: 20230405153644.25300-1-akihiko.odaki@daynix.com Reviewed-by: Peter Maydell Signed-off-by: Peter Maydell (cherry picked from commit ad5c6ddea327758daa9f0e6edd916be39dce7dca) Signed-off-by: Michael Tokarev --- target/arm/kvm.c | 2 ++ target/arm/kvm64.c | 18 ++++-------------- target/arm/kvm_arm.h | 8 ++++++++ 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/target/arm/kvm.c b/target/arm/kvm.c index f022c644d2..84da49332c 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -280,6 +280,8 @@ int kvm_arch_init(MachineState *ms, KVMState *s) } } + kvm_arm_init_debug(s); + return ret; } diff --git a/target/arm/kvm64.c b/target/arm/kvm64.c index 1197253d12..810db33ccb 100644 --- a/target/arm/kvm64.c +++ b/target/arm/kvm64.c @@ -74,24 +74,16 @@ GArray *hw_breakpoints, *hw_watchpoints; #define get_hw_bp(i) (&g_array_index(hw_breakpoints, HWBreakpoint, i)) #define get_hw_wp(i) (&g_array_index(hw_watchpoints, HWWatchpoint, i)) -/** - * kvm_arm_init_debug() - check for guest debug capabilities - * @cs: CPUState - * - * kvm_check_extension returns the number of debug registers we have - * or 0 if we have none. - * - */ -static void kvm_arm_init_debug(CPUState *cs) +void kvm_arm_init_debug(KVMState *s) { - have_guest_debug = kvm_check_extension(cs->kvm_state, + have_guest_debug = kvm_check_extension(s, KVM_CAP_SET_GUEST_DEBUG); - max_hw_wps = kvm_check_extension(cs->kvm_state, KVM_CAP_GUEST_DEBUG_HW_WPS); + max_hw_wps = kvm_check_extension(s, KVM_CAP_GUEST_DEBUG_HW_WPS); hw_watchpoints = g_array_sized_new(true, true, sizeof(HWWatchpoint), max_hw_wps); - max_hw_bps = kvm_check_extension(cs->kvm_state, KVM_CAP_GUEST_DEBUG_HW_BPS); + max_hw_bps = kvm_check_extension(s, KVM_CAP_GUEST_DEBUG_HW_BPS); hw_breakpoints = g_array_sized_new(true, true, sizeof(HWBreakpoint), max_hw_bps); return; @@ -920,8 +912,6 @@ int kvm_arch_init_vcpu(CPUState *cs) } cpu->mp_affinity = mpidr & ARM64_AFFINITY_MASK; - kvm_arm_init_debug(cs); - /* Check whether user space can specify guest syndrome value */ kvm_arm_init_serror_injection(cs); diff --git a/target/arm/kvm_arm.h b/target/arm/kvm_arm.h index 99017b635c..330fbe5c72 100644 --- a/target/arm/kvm_arm.h +++ b/target/arm/kvm_arm.h @@ -18,6 +18,14 @@ #define KVM_ARM_VGIC_V2 (1 << 0) #define KVM_ARM_VGIC_V3 (1 << 1) +/** + * kvm_arm_init_debug() - initialize guest debug capabilities + * @s: KVMState + * + * Should be called only once before using guest debug capabilities. + */ +void kvm_arm_init_debug(KVMState *s); + /** * kvm_arm_vcpu_init: * @cs: CPUState From e96dc26e89e4eefa73088b0358cc389607a4cbc9 Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Mon, 24 Apr 2023 16:19:19 +0100 Subject: [PATCH 077/174] hw/net/msf2-emac: Don't modify descriptor in-place in emac_store_desc() The msf2-emac ethernet controller has functions emac_load_desc() and emac_store_desc() which read and write the in-memory descriptor blocks and handle conversion between guest and host endianness. As currently written, emac_store_desc() does the endianness conversion in-place; this means that it effectively consumes the input EmacDesc struct, because on a big-endian host the fields will be overwritten with the little-endian versions of their values. Unfortunately, in all the callsites the code continues to access fields in the EmacDesc struct after it has called emac_store_desc() -- specifically, it looks at the d.next field. The effect of this is that on a big-endian host networking doesn't work because the address of the next descriptor is corrupted. We could fix this by making the callsite avoid using the struct; but it's more robust to have emac_store_desc() leave its input alone. (emac_load_desc() also does an in-place conversion, but here this is fine, because the function is supposed to be initializing the struct.) Cc: qemu-stable@nongnu.org Signed-off-by: Peter Maydell Reviewed-by: Thomas Huth Message-id: 20230424151919.1333299-1-peter.maydell@linaro.org (cherry picked from commit d565f58b38424e9a390a7ea33ff7477bab693fda) Signed-off-by: Michael Tokarev --- hw/net/msf2-emac.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/hw/net/msf2-emac.c b/hw/net/msf2-emac.c index 7ccd3e5142..db3a04deb1 100644 --- a/hw/net/msf2-emac.c +++ b/hw/net/msf2-emac.c @@ -118,14 +118,18 @@ static void emac_load_desc(MSF2EmacState *s, EmacDesc *d, hwaddr desc) d->next = le32_to_cpu(d->next); } -static void emac_store_desc(MSF2EmacState *s, EmacDesc *d, hwaddr desc) +static void emac_store_desc(MSF2EmacState *s, const EmacDesc *d, hwaddr desc) { - /* Convert from host endianness into LE. */ - d->pktaddr = cpu_to_le32(d->pktaddr); - d->pktsize = cpu_to_le32(d->pktsize); - d->next = cpu_to_le32(d->next); + EmacDesc outd; + /* + * Convert from host endianness into LE. We use a local struct because + * calling code may still want to look at the fields afterwards. + */ + outd.pktaddr = cpu_to_le32(d->pktaddr); + outd.pktsize = cpu_to_le32(d->pktsize); + outd.next = cpu_to_le32(d->next); - address_space_write(&s->dma_as, desc, MEMTXATTRS_UNSPECIFIED, d, sizeof *d); + address_space_write(&s->dma_as, desc, MEMTXATTRS_UNSPECIFIED, &outd, sizeof outd); } static void msf2_dma_tx(MSF2EmacState *s) From 8e9c265f14dbc904d6e8aab1fa46f63c17c936c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Date: Mon, 24 Apr 2023 16:27:15 +0100 Subject: [PATCH 078/174] hw/arm/boot: Make write_bootloader() public as arm_write_bootloader() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The arm boot.c code includes a utility function write_bootloader() which assists in writing a boot-code fragment into guest memory, including handling endianness and fixing it up with entry point addresses and similar things. This is useful not just for the boot.c code but also in board model code, so rename it to arm_write_bootloader() and make it globally visible. Since we are making it public, make its API a little neater: move the AddressSpace* argument to be next to the hwaddr argument, and allow the fixupcontext array to be const, since we never modify it in this function. Cc: qemu-stable@nongnu.org Signed-off-by: Cédric Le Goater Tested-by: Cédric Le Goater Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: Peter Maydell Message-id: 20230424152717.1333930-2-peter.maydell@linaro.org [PMM: Split out from another patch by Cédric, added doc comment] Signed-off-by: Peter Maydell (cherry picked from commit 0fe43f0abf19bbe24df3dbf0613bb47ed55f1482) Signed-off-by: Michael Tokarev --- hw/arm/boot.c | 35 +++++++------------------------ include/hw/arm/boot.h | 49 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 27 deletions(-) diff --git a/hw/arm/boot.c b/hw/arm/boot.c index 725bab8adc..8ff315f431 100644 --- a/hw/arm/boot.c +++ b/hw/arm/boot.c @@ -59,26 +59,6 @@ AddressSpace *arm_boot_address_space(ARMCPU *cpu, return cpu_get_address_space(cs, asidx); } -typedef enum { - FIXUP_NONE = 0, /* do nothing */ - FIXUP_TERMINATOR, /* end of insns */ - FIXUP_BOARDID, /* overwrite with board ID number */ - FIXUP_BOARD_SETUP, /* overwrite with board specific setup code address */ - FIXUP_ARGPTR_LO, /* overwrite with pointer to kernel args */ - FIXUP_ARGPTR_HI, /* overwrite with pointer to kernel args (high half) */ - FIXUP_ENTRYPOINT_LO, /* overwrite with kernel entry point */ - FIXUP_ENTRYPOINT_HI, /* overwrite with kernel entry point (high half) */ - FIXUP_GIC_CPU_IF, /* overwrite with GIC CPU interface address */ - FIXUP_BOOTREG, /* overwrite with boot register address */ - FIXUP_DSB, /* overwrite with correct DSB insn for cpu */ - FIXUP_MAX, -} FixupType; - -typedef struct ARMInsnFixup { - uint32_t insn; - FixupType fixup; -} ARMInsnFixup; - static const ARMInsnFixup bootloader_aarch64[] = { { 0x580000c0 }, /* ldr x0, arg ; Load the lower 32-bits of DTB */ { 0xaa1f03e1 }, /* mov x1, xzr */ @@ -149,9 +129,10 @@ static const ARMInsnFixup smpboot[] = { { 0, FIXUP_TERMINATOR } }; -static void write_bootloader(const char *name, hwaddr addr, - const ARMInsnFixup *insns, uint32_t *fixupcontext, - AddressSpace *as) +void arm_write_bootloader(const char *name, + AddressSpace *as, hwaddr addr, + const ARMInsnFixup *insns, + const uint32_t *fixupcontext) { /* Fix up the specified bootloader fragment and write it into * guest memory using rom_add_blob_fixed(). fixupcontext is @@ -213,8 +194,8 @@ static void default_write_secondary(ARMCPU *cpu, fixupcontext[FIXUP_DSB] = CP15_DSB_INSN; } - write_bootloader("smpboot", info->smp_loader_start, - smpboot, fixupcontext, as); + arm_write_bootloader("smpboot", as, info->smp_loader_start, + smpboot, fixupcontext); } void arm_write_secure_board_setup_dummy_smc(ARMCPU *cpu, @@ -1174,8 +1155,8 @@ static void arm_setup_direct_kernel_boot(ARMCPU *cpu, fixupcontext[FIXUP_ENTRYPOINT_LO] = entry; fixupcontext[FIXUP_ENTRYPOINT_HI] = entry >> 32; - write_bootloader("bootloader", info->loader_start, - primary_loader, fixupcontext, as); + arm_write_bootloader("bootloader", as, info->loader_start, + primary_loader, fixupcontext); if (info->write_board_setup) { info->write_board_setup(cpu, info); diff --git a/include/hw/arm/boot.h b/include/hw/arm/boot.h index f18cc3064f..80c492d742 100644 --- a/include/hw/arm/boot.h +++ b/include/hw/arm/boot.h @@ -183,4 +183,53 @@ void arm_write_secure_board_setup_dummy_smc(ARMCPU *cpu, const struct arm_boot_info *info, hwaddr mvbar_addr); +typedef enum { + FIXUP_NONE = 0, /* do nothing */ + FIXUP_TERMINATOR, /* end of insns */ + FIXUP_BOARDID, /* overwrite with board ID number */ + FIXUP_BOARD_SETUP, /* overwrite with board specific setup code address */ + FIXUP_ARGPTR_LO, /* overwrite with pointer to kernel args */ + FIXUP_ARGPTR_HI, /* overwrite with pointer to kernel args (high half) */ + FIXUP_ENTRYPOINT_LO, /* overwrite with kernel entry point */ + FIXUP_ENTRYPOINT_HI, /* overwrite with kernel entry point (high half) */ + FIXUP_GIC_CPU_IF, /* overwrite with GIC CPU interface address */ + FIXUP_BOOTREG, /* overwrite with boot register address */ + FIXUP_DSB, /* overwrite with correct DSB insn for cpu */ + FIXUP_MAX, +} FixupType; + +typedef struct ARMInsnFixup { + uint32_t insn; + FixupType fixup; +} ARMInsnFixup; + +/** + * arm_write_bootloader - write a bootloader to guest memory + * @name: name of the bootloader blob + * @as: AddressSpace to write the bootloader + * @addr: guest address to write it + * @insns: the blob to be loaded + * @fixupcontext: context to be used for any fixups in @insns + * + * Write a bootloader to guest memory at address @addr in the address + * space @as. @name is the name to use for the resulting ROM blob, so + * it should be unique in the system and reasonably identifiable for debugging. + * + * @insns must be an array of ARMInsnFixup structs, each of which has + * one 32-bit value to be written to the guest memory, and a fixup to be + * applied to the value. FIXUP_NONE (do nothing) is value 0, so effectively + * the fixup is optional when writing a struct initializer. + * The final entry in the array must be { 0, FIXUP_TERMINATOR }. + * + * All other supported fixup types have the semantics "ignore insn + * and instead use the value from the array element @fixupcontext[fixup]". + * The caller should therefore provide @fixupcontext as an array of + * size FIXUP_MAX whose elements have been initialized for at least + * the entries that @insns refers to. + */ +void arm_write_bootloader(const char *name, + AddressSpace *as, hwaddr addr, + const ARMInsnFixup *insns, + const uint32_t *fixupcontext); + #endif /* HW_ARM_BOOT_H */ From 5ebe440c2b26cd953fc9014a40cd13e02bc334c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Date: Mon, 24 Apr 2023 16:27:16 +0100 Subject: [PATCH 079/174] hw/arm/aspeed: Use arm_write_bootloader() to write the bootloader MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When writing the secondary-CPU stub boot loader code to the guest, use arm_write_bootloader() instead of directly calling rom_add_blob_fixed(). This fixes a bug on big-endian hosts, because arm_write_bootloader() will correctly byte-swap the host-byte-order array values into the guest-byte-order to write into the guest memory. Cc: qemu-stable@nongnu.org Signed-off-by: Cédric Le Goater Tested-by: Cédric Le Goater Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: Peter Maydell Message-id: 20230424152717.1333930-3-peter.maydell@linaro.org [PMM: Moved the "make arm_write_bootloader() function public" part to its own patch; updated commit message to note that this fixes an actual bug; adjust to the API changes noted in previous commit] Signed-off-by: Peter Maydell (cherry picked from commit 902bba549fc386b4b9805320ed1a2e5b68478bdd) Signed-off-by: Michael Tokarev --- hw/arm/aspeed.c | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/hw/arm/aspeed.c b/hw/arm/aspeed.c index 55f114ef72..97fb1916ec 100644 --- a/hw/arm/aspeed.c +++ b/hw/arm/aspeed.c @@ -188,33 +188,35 @@ struct AspeedMachineState { static void aspeed_write_smpboot(ARMCPU *cpu, const struct arm_boot_info *info) { - static const uint32_t poll_mailbox_ready[] = { + AddressSpace *as = arm_boot_address_space(cpu, info); + static const ARMInsnFixup poll_mailbox_ready[] = { /* * r2 = per-cpu go sign value * r1 = AST_SMP_MBOX_FIELD_ENTRY * r0 = AST_SMP_MBOX_FIELD_GOSIGN */ - 0xee100fb0, /* mrc p15, 0, r0, c0, c0, 5 */ - 0xe21000ff, /* ands r0, r0, #255 */ - 0xe59f201c, /* ldr r2, [pc, #28] */ - 0xe1822000, /* orr r2, r2, r0 */ + { 0xee100fb0 }, /* mrc p15, 0, r0, c0, c0, 5 */ + { 0xe21000ff }, /* ands r0, r0, #255 */ + { 0xe59f201c }, /* ldr r2, [pc, #28] */ + { 0xe1822000 }, /* orr r2, r2, r0 */ - 0xe59f1018, /* ldr r1, [pc, #24] */ - 0xe59f0018, /* ldr r0, [pc, #24] */ + { 0xe59f1018 }, /* ldr r1, [pc, #24] */ + { 0xe59f0018 }, /* ldr r0, [pc, #24] */ - 0xe320f002, /* wfe */ - 0xe5904000, /* ldr r4, [r0] */ - 0xe1520004, /* cmp r2, r4 */ - 0x1afffffb, /* bne */ - 0xe591f000, /* ldr pc, [r1] */ - AST_SMP_MBOX_GOSIGN, - AST_SMP_MBOX_FIELD_ENTRY, - AST_SMP_MBOX_FIELD_GOSIGN, + { 0xe320f002 }, /* wfe */ + { 0xe5904000 }, /* ldr r4, [r0] */ + { 0xe1520004 }, /* cmp r2, r4 */ + { 0x1afffffb }, /* bne */ + { 0xe591f000 }, /* ldr pc, [r1] */ + { AST_SMP_MBOX_GOSIGN }, + { AST_SMP_MBOX_FIELD_ENTRY }, + { AST_SMP_MBOX_FIELD_GOSIGN }, + { 0, FIXUP_TERMINATOR } }; + static const uint32_t fixupcontext[FIXUP_MAX] = { 0 }; - rom_add_blob_fixed("aspeed.smpboot", poll_mailbox_ready, - sizeof(poll_mailbox_ready), - info->smp_loader_start); + arm_write_bootloader("aspeed.smpboot", as, info->smp_loader_start, + poll_mailbox_ready, fixupcontext); } static void aspeed_reset_secondary(ARMCPU *cpu, From d46d4036160513ed07b0022a37bd22f425ca113d Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Mon, 24 Apr 2023 16:27:17 +0100 Subject: [PATCH 080/174] hw/arm/raspi: Use arm_write_bootloader() to write boot code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When writing the secondary-CPU stub boot loader code to the guest, use arm_write_bootloader() instead of directly calling rom_add_blob_fixed(). This fixes a bug on big-endian hosts, because arm_write_bootloader() will correctly byte-swap the host-byte-order array values into the guest-byte-order to write into the guest memory. Cc: qemu-stable@nongnu.org Signed-off-by: Peter Maydell Tested-by: Cédric Le Goater Reviewed-by: Philippe Mathieu-Daudé Message-id: 20230424152717.1333930-4-peter.maydell@linaro.org (cherry picked from commit 0acbdb4c4ab6b0a09f159bae4899b0737cf64242) Signed-off-by: Michael Tokarev --- hw/arm/raspi.c | 64 +++++++++++++++++++++++++++----------------------- 1 file changed, 34 insertions(+), 30 deletions(-) diff --git a/hw/arm/raspi.c b/hw/arm/raspi.c index 92d068d1f9..a7d287b1a8 100644 --- a/hw/arm/raspi.c +++ b/hw/arm/raspi.c @@ -16,6 +16,7 @@ #include "qemu/units.h" #include "qemu/cutils.h" #include "qapi/error.h" +#include "hw/arm/boot.h" #include "hw/arm/bcm2836.h" #include "hw/registerfields.h" #include "qemu/error-report.h" @@ -124,20 +125,22 @@ static const char *board_type(uint32_t board_rev) static void write_smpboot(ARMCPU *cpu, const struct arm_boot_info *info) { - static const uint32_t smpboot[] = { - 0xe1a0e00f, /* mov lr, pc */ - 0xe3a0fe00 + (BOARDSETUP_ADDR >> 4), /* mov pc, BOARDSETUP_ADDR */ - 0xee100fb0, /* mrc p15, 0, r0, c0, c0, 5;get core ID */ - 0xe7e10050, /* ubfx r0, r0, #0, #2 ;extract LSB */ - 0xe59f5014, /* ldr r5, =0x400000CC ;load mbox base */ - 0xe320f001, /* 1: yield */ - 0xe7953200, /* ldr r3, [r5, r0, lsl #4] ;read mbox for our core*/ - 0xe3530000, /* cmp r3, #0 ;spin while zero */ - 0x0afffffb, /* beq 1b */ - 0xe7853200, /* str r3, [r5, r0, lsl #4] ;clear mbox */ - 0xe12fff13, /* bx r3 ;jump to target */ - 0x400000cc, /* (constant: mailbox 3 read/clear base) */ + static const ARMInsnFixup smpboot[] = { + { 0xe1a0e00f }, /* mov lr, pc */ + { 0xe3a0fe00 + (BOARDSETUP_ADDR >> 4) }, /* mov pc, BOARDSETUP_ADDR */ + { 0xee100fb0 }, /* mrc p15, 0, r0, c0, c0, 5;get core ID */ + { 0xe7e10050 }, /* ubfx r0, r0, #0, #2 ;extract LSB */ + { 0xe59f5014 }, /* ldr r5, =0x400000CC ;load mbox base */ + { 0xe320f001 }, /* 1: yield */ + { 0xe7953200 }, /* ldr r3, [r5, r0, lsl #4] ;read mbox for our core */ + { 0xe3530000 }, /* cmp r3, #0 ;spin while zero */ + { 0x0afffffb }, /* beq 1b */ + { 0xe7853200 }, /* str r3, [r5, r0, lsl #4] ;clear mbox */ + { 0xe12fff13 }, /* bx r3 ;jump to target */ + { 0x400000cc }, /* (constant: mailbox 3 read/clear base) */ + { 0, FIXUP_TERMINATOR } }; + static const uint32_t fixupcontext[FIXUP_MAX] = { 0 }; /* check that we don't overrun board setup vectors */ QEMU_BUILD_BUG_ON(SMPBOOT_ADDR + sizeof(smpboot) > MVBAR_ADDR); @@ -145,9 +148,8 @@ static void write_smpboot(ARMCPU *cpu, const struct arm_boot_info *info) QEMU_BUILD_BUG_ON((BOARDSETUP_ADDR & 0xf) != 0 || (BOARDSETUP_ADDR >> 4) >= 0x100); - rom_add_blob_fixed_as("raspi_smpboot", smpboot, sizeof(smpboot), - info->smp_loader_start, - arm_boot_address_space(cpu, info)); + arm_write_bootloader("raspi_smpboot", arm_boot_address_space(cpu, info), + info->smp_loader_start, smpboot, fixupcontext); } static void write_smpboot64(ARMCPU *cpu, const struct arm_boot_info *info) @@ -161,26 +163,28 @@ static void write_smpboot64(ARMCPU *cpu, const struct arm_boot_info *info) * the primary CPU goes into the kernel. We put these variables inside * a rom blob, so that the reset for ROM contents zeroes them for us. */ - static const uint32_t smpboot[] = { - 0xd2801b05, /* mov x5, 0xd8 */ - 0xd53800a6, /* mrs x6, mpidr_el1 */ - 0x924004c6, /* and x6, x6, #0x3 */ - 0xd503205f, /* spin: wfe */ - 0xf86678a4, /* ldr x4, [x5,x6,lsl #3] */ - 0xb4ffffc4, /* cbz x4, spin */ - 0xd2800000, /* mov x0, #0x0 */ - 0xd2800001, /* mov x1, #0x0 */ - 0xd2800002, /* mov x2, #0x0 */ - 0xd2800003, /* mov x3, #0x0 */ - 0xd61f0080, /* br x4 */ + static const ARMInsnFixup smpboot[] = { + { 0xd2801b05 }, /* mov x5, 0xd8 */ + { 0xd53800a6 }, /* mrs x6, mpidr_el1 */ + { 0x924004c6 }, /* and x6, x6, #0x3 */ + { 0xd503205f }, /* spin: wfe */ + { 0xf86678a4 }, /* ldr x4, [x5,x6,lsl #3] */ + { 0xb4ffffc4 }, /* cbz x4, spin */ + { 0xd2800000 }, /* mov x0, #0x0 */ + { 0xd2800001 }, /* mov x1, #0x0 */ + { 0xd2800002 }, /* mov x2, #0x0 */ + { 0xd2800003 }, /* mov x3, #0x0 */ + { 0xd61f0080 }, /* br x4 */ + { 0, FIXUP_TERMINATOR } }; + static const uint32_t fixupcontext[FIXUP_MAX] = { 0 }; static const uint64_t spintables[] = { 0, 0, 0, 0 }; - rom_add_blob_fixed_as("raspi_smpboot", smpboot, sizeof(smpboot), - info->smp_loader_start, as); + arm_write_bootloader("raspi_smpboot", as, info->smp_loader_start, + smpboot, fixupcontext); rom_add_blob_fixed_as("raspi_spintables", spintables, sizeof(spintables), SPINTABLE_ADDR, as); } From 5eb742fce562dc7f364337a5bbd08bc200ddc0e6 Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Mon, 24 Apr 2023 16:28:33 +0100 Subject: [PATCH 081/174] hw/intc/allwinner-a10-pic: Don't use set_bit()/clear_bit() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Allwinner PIC model uses set_bit() and clear_bit() to update the values in its irq_pending[] array when an interrupt arrives. However it is using these functions wrongly: they work on an array of type 'long', and it is passing an array of type 'uint32_t'. Because the code manually figures out the right array element, this works on little-endian hosts and on 32-bit big-endian hosts, where bits 0..31 in a 'long' are in the same place as they are in a 'uint32_t'. However it breaks on 64-bit big-endian hosts. Remove the use of set_bit() and clear_bit() in favour of using deposit32() on the array element. This fixes a bug where on big-endian 64-bit hosts the guest kernel would hang early on in bootup. Cc: qemu-stable@nongnu.org Signed-off-by: Peter Maydell Reviewed-by: Thomas Huth Reviewed-by: Philippe Mathieu-Daudé Message-id: 20230424152833.1334136-1-peter.maydell@linaro.org (cherry picked from commit 2c5fa0778c3b4307f9f3af7f27886c46d129c62f) Signed-off-by: Michael Tokarev --- hw/intc/allwinner-a10-pic.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/hw/intc/allwinner-a10-pic.c b/hw/intc/allwinner-a10-pic.c index 8cca124807..4875e68ba6 100644 --- a/hw/intc/allwinner-a10-pic.c +++ b/hw/intc/allwinner-a10-pic.c @@ -49,12 +49,9 @@ static void aw_a10_pic_update(AwA10PICState *s) static void aw_a10_pic_set_irq(void *opaque, int irq, int level) { AwA10PICState *s = opaque; + uint32_t *pending_reg = &s->irq_pending[irq / 32]; - if (level) { - set_bit(irq % 32, (void *)&s->irq_pending[irq / 32]); - } else { - clear_bit(irq % 32, (void *)&s->irq_pending[irq / 32]); - } + *pending_reg = deposit32(*pending_reg, irq % 32, 1, level); aw_a10_pic_update(s); } From e4e79c8e00753a317adbd69f89c79072b5bb397a Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Mon, 24 Apr 2023 16:39:08 +0100 Subject: [PATCH 082/174] target/arm: Define and use new load_cpu_field_low32() In several places in the 32-bit Arm translate.c, we try to use load_cpu_field() to load from a CPUARMState field into a TCGv_i32 where the field is actually 64-bit. This works on little-endian hosts, but gives the wrong half of the register on big-endian. Add a new load_cpu_field_low32() which loads the low 32 bits of a 64-bit field into a TCGv_i32. The new macro includes a compile-time check against accidentally using it on a field of the wrong size. Use it to fix the two places in the code where we were using load_cpu_field() on a 64-bit field. This fixes a bug where on big-endian hosts the guest would crash after executing an ERET instruction, and a more corner case one where some UNDEFs for attempted accesses to MSR banked registers from Secure EL1 might go to the wrong EL. Cc: qemu-stable@nongnu.org Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson Message-id: 20230424153909.1419369-2-peter.maydell@linaro.org (cherry picked from commit 7f3a3d3dc433dc06c0adb480729af80f9c8e3739) Signed-off-by: Michael Tokarev --- target/arm/translate-a32.h | 7 +++++++ target/arm/translate.c | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/target/arm/translate-a32.h b/target/arm/translate-a32.h index 5339c22f1e..99eea85fa8 100644 --- a/target/arm/translate-a32.h +++ b/target/arm/translate-a32.h @@ -61,6 +61,13 @@ static inline TCGv_i32 load_cpu_offset(int offset) #define load_cpu_field(name) load_cpu_offset(offsetof(CPUARMState, name)) +/* Load from the low half of a 64-bit field to a TCGv_i32 */ +#define load_cpu_field_low32(name) \ + ({ \ + QEMU_BUILD_BUG_ON(sizeof_field(CPUARMState, name) != 8); \ + load_cpu_offset(offsetoflow32(CPUARMState, name)); \ + }) + void store_cpu_offset(TCGv_i32 var, int offset, int size); #define store_cpu_field(var, name) \ diff --git a/target/arm/translate.c b/target/arm/translate.c index 1dcaefb8e7..a06da05640 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -2886,7 +2886,7 @@ static bool msr_banked_access_decode(DisasContext *s, int r, int sysm, int rn, if (arm_dc_feature(s, ARM_FEATURE_AARCH64) && dc_isar_feature(aa64_sel2, s)) { /* Target EL is EL<3 minus SCR_EL3.EEL2> */ - tcg_el = load_cpu_field(cp15.scr_el3); + tcg_el = load_cpu_field_low32(cp15.scr_el3); tcg_gen_sextract_i32(tcg_el, tcg_el, ctz32(SCR_EEL2), 1); tcg_gen_addi_i32(tcg_el, tcg_el, 3); } else { @@ -6558,7 +6558,7 @@ static bool trans_ERET(DisasContext *s, arg_ERET *a) } if (s->current_el == 2) { /* ERET from Hyp uses ELR_Hyp, not LR */ - tmp = load_cpu_field(elr_el[2]); + tmp = load_cpu_field_low32(elr_el[2]); } else { tmp = load_reg(s, 14); } From 4b02ac725a5e65a838c8a21be54d6325365b5e1f Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Mon, 24 Apr 2023 17:50:52 +0100 Subject: [PATCH 083/174] hw/sd/allwinner-sdhost: Correctly byteswap descriptor fields MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In allwinner_sdhost_process_desc() we just read directly from guest memory into a host TransferDescriptor struct and back. This only works on little-endian hosts. Abstract the reading and writing of descriptors into functions that handle the byte-swapping so that TransferDescriptor structs as seen by the rest of the code are always in host-order. This fixes a failure of one of the avocado tests on s390. Cc: qemu-stable@nongnu.org Signed-off-by: Peter Maydell Reviewed-by: Thomas Huth Reviewed-by: Alex Bennée Reviewed-by: Philippe Mathieu-Daudé Message-id: 20230424165053.1428857-2-peter.maydell@linaro.org (cherry picked from commit 3e20d90824c262de6887aa1bc52af94db69e4310) Signed-off-by: Michael Tokarev --- hw/sd/allwinner-sdhost.c | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/hw/sd/allwinner-sdhost.c b/hw/sd/allwinner-sdhost.c index 51e5e90830..92a0f42708 100644 --- a/hw/sd/allwinner-sdhost.c +++ b/hw/sd/allwinner-sdhost.c @@ -302,6 +302,30 @@ static void allwinner_sdhost_auto_stop(AwSdHostState *s) } } +static void read_descriptor(AwSdHostState *s, hwaddr desc_addr, + TransferDescriptor *desc) +{ + uint32_t desc_words[4]; + dma_memory_read(&s->dma_as, desc_addr, &desc_words, sizeof(desc_words), + MEMTXATTRS_UNSPECIFIED); + desc->status = le32_to_cpu(desc_words[0]); + desc->size = le32_to_cpu(desc_words[1]); + desc->addr = le32_to_cpu(desc_words[2]); + desc->next = le32_to_cpu(desc_words[3]); +} + +static void write_descriptor(AwSdHostState *s, hwaddr desc_addr, + const TransferDescriptor *desc) +{ + uint32_t desc_words[4]; + desc_words[0] = cpu_to_le32(desc->status); + desc_words[1] = cpu_to_le32(desc->size); + desc_words[2] = cpu_to_le32(desc->addr); + desc_words[3] = cpu_to_le32(desc->next); + dma_memory_write(&s->dma_as, desc_addr, &desc_words, sizeof(desc_words), + MEMTXATTRS_UNSPECIFIED); +} + static uint32_t allwinner_sdhost_process_desc(AwSdHostState *s, hwaddr desc_addr, TransferDescriptor *desc, @@ -312,9 +336,7 @@ static uint32_t allwinner_sdhost_process_desc(AwSdHostState *s, uint32_t num_bytes = max_bytes; uint8_t buf[1024]; - /* Read descriptor */ - dma_memory_read(&s->dma_as, desc_addr, desc, sizeof(*desc), - MEMTXATTRS_UNSPECIFIED); + read_descriptor(s, desc_addr, desc); if (desc->size == 0) { desc->size = klass->max_desc_size; } else if (desc->size > klass->max_desc_size) { @@ -356,8 +378,7 @@ static uint32_t allwinner_sdhost_process_desc(AwSdHostState *s, /* Clear hold flag and flush descriptor */ desc->status &= ~DESC_STATUS_HOLD; - dma_memory_write(&s->dma_as, desc_addr, desc, sizeof(*desc), - MEMTXATTRS_UNSPECIFIED); + write_descriptor(s, desc_addr, desc); return num_done; } From ec979ff52c1026a85595062c5e03a31a6f2fb786 Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Mon, 24 Apr 2023 17:50:53 +0100 Subject: [PATCH 084/174] hw/net/allwinner-sun8i-emac: Correctly byteswap descriptor fields MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In allwinner-sun8i-emac we just read directly from guest memory into a host FrameDescriptor struct and back. This only works on little-endian hosts. Reading and writing of descriptors is already abstracted into functions; make those functions also handle the byte-swapping so that TransferDescriptor structs as seen by the rest of the code are always in host-order, and fix two places that were doing ad-hoc descriptor reading without using the functions. Cc: qemu-stable@nongnu.org Signed-off-by: Peter Maydell Reviewed-by: Thomas Huth Reviewed-by: Alex Bennée Reviewed-by: Philippe Mathieu-Daudé Message-id: 20230424165053.1428857-3-peter.maydell@linaro.org (cherry picked from commit a4ae17e5ec512862bf73e40dfbb1e7db71f2c1e7) Signed-off-by: Michael Tokarev --- hw/net/allwinner-sun8i-emac.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/hw/net/allwinner-sun8i-emac.c b/hw/net/allwinner-sun8i-emac.c index ecc0245fe8..c3fed5fcbe 100644 --- a/hw/net/allwinner-sun8i-emac.c +++ b/hw/net/allwinner-sun8i-emac.c @@ -350,8 +350,13 @@ static void allwinner_sun8i_emac_get_desc(AwSun8iEmacState *s, FrameDescriptor *desc, uint32_t phys_addr) { - dma_memory_read(&s->dma_as, phys_addr, desc, sizeof(*desc), + uint32_t desc_words[4]; + dma_memory_read(&s->dma_as, phys_addr, &desc_words, sizeof(desc_words), MEMTXATTRS_UNSPECIFIED); + desc->status = le32_to_cpu(desc_words[0]); + desc->status2 = le32_to_cpu(desc_words[1]); + desc->addr = le32_to_cpu(desc_words[2]); + desc->next = le32_to_cpu(desc_words[3]); } static uint32_t allwinner_sun8i_emac_next_desc(AwSun8iEmacState *s, @@ -400,10 +405,15 @@ static uint32_t allwinner_sun8i_emac_tx_desc(AwSun8iEmacState *s, } static void allwinner_sun8i_emac_flush_desc(AwSun8iEmacState *s, - FrameDescriptor *desc, + const FrameDescriptor *desc, uint32_t phys_addr) { - dma_memory_write(&s->dma_as, phys_addr, desc, sizeof(*desc), + uint32_t desc_words[4]; + desc_words[0] = cpu_to_le32(desc->status); + desc_words[1] = cpu_to_le32(desc->status2); + desc_words[2] = cpu_to_le32(desc->addr); + desc_words[3] = cpu_to_le32(desc->next); + dma_memory_write(&s->dma_as, phys_addr, &desc_words, sizeof(desc_words), MEMTXATTRS_UNSPECIFIED); } @@ -638,8 +648,7 @@ static uint64_t allwinner_sun8i_emac_read(void *opaque, hwaddr offset, break; case REG_TX_CUR_BUF: /* Transmit Current Buffer */ if (s->tx_desc_curr != 0) { - dma_memory_read(&s->dma_as, s->tx_desc_curr, &desc, sizeof(desc), - MEMTXATTRS_UNSPECIFIED); + allwinner_sun8i_emac_get_desc(s, &desc, s->tx_desc_curr); value = desc.addr; } else { value = 0; @@ -652,8 +661,7 @@ static uint64_t allwinner_sun8i_emac_read(void *opaque, hwaddr offset, break; case REG_RX_CUR_BUF: /* Receive Current Buffer */ if (s->rx_desc_curr != 0) { - dma_memory_read(&s->dma_as, s->rx_desc_curr, &desc, sizeof(desc), - MEMTXATTRS_UNSPECIFIED); + allwinner_sun8i_emac_get_desc(s, &desc, s->rx_desc_curr); value = desc.addr; } else { value = 0; From 9b300a100c6db039d32e444d587c292369585eee Mon Sep 17 00:00:00 2001 From: Shivaprasad G Bhat Date: Tue, 2 May 2023 20:55:30 +0530 Subject: [PATCH 085/174] softfloat: Fix the incorrect computation in float32_exp2 The float32_exp2 function is computing wrong exponent of 2. For example, with the following set of values {0.1, 2.0, 2.0, -1.0}, the expected output would be {1.071773, 4.000000, 4.000000, 0.500000}. Instead, the function is computing {1.119102, 3.382044, 3.382044, -0.191022} Looking at the code, the float32_exp2() attempts to do this 2 3 4 5 n x x x x x x x e = 1 + --- + --- + --- + --- + --- + ... + --- + ... 1! 2! 3! 4! 5! n! But because of the typo it ends up doing x x x x x x x e = 1 + --- + --- + --- + --- + --- + ... + --- + ... 1! 2! 3! 4! 5! n! This is because instead of the xnp which holds the numerator, parts_muladd is using the xp which is just 'x'. Commit '572c4d862ff2' refactored this function, and mistakenly used xp instead of xnp. Cc: qemu-stable@nongnu.org Fixes: 572c4d862ff2 "softfloat: Convert float32_exp2 to FloatParts" Partially-Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1623 Reported-By: Luca Barbato (https://gitlab.com/lu-zero) Signed-off-by: Shivaprasad G Bhat Signed-off-by: Vaibhav Jain Message-Id: <168304110865.537992.13059030916325018670.stgit@localhost.localdomain> Reviewed-by: Richard Henderson Signed-off-by: Richard Henderson (cherry picked from commit 1098cc3fcf952763fc9fd72c1c8fda30a18cc8ea) Signed-off-by: Michael Tokarev --- fpu/softfloat.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index c7454c3eb1..108f9cb224 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -5135,7 +5135,7 @@ float32 float32_exp2(float32 a, float_status *status) float64_unpack_canonical(&rp, float64_one, status); for (i = 0 ; i < 15 ; i++) { float64_unpack_canonical(&tp, float32_exp2_coefficients[i], status); - rp = *parts_muladd(&tp, &xp, &rp, 0, status); + rp = *parts_muladd(&tp, &xnp, &rp, 0, status); xnp = *parts_mul(&xnp, &xp, status); } From e3074f666f9346752edc96eb33b2faf6b56ee0e3 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 4 May 2023 10:20:46 +0200 Subject: [PATCH 086/174] meson: leave unnecessary modules out of the build meson.build files choose whether to build modules based on foo.found() expressions. If a feature is enabled (e.g. --enable-gtk), these expressions are true even if the code is not used by any emulator, and this results in an unexpected difference between modular and non-modular builds. For non-modular builds, the files are not included in any binary, and therefore the source files are never processed. For modular builds, however, all .so files are unconditionally built by default, and therefore a normal "make" tries to build them. However, the corresponding trace-*.h files are absent due to this conditional: if have_system trace_events_subdirs += [ ... 'ui', ... ] endif which was added to avoid wasting time running tracetool on unused trace-events files. This causes a compilation failure; fix it by skipping module builds entirely if (depending on the module directory) have_block or have_system are false. Reported-by: Michael Tokarev Cc: qemu-stable@nongnu.org Signed-off-by: Paolo Bonzini (cherry picked from commit ef709860ea12ec59c4cd7373bd2fd7a4e50143ee) Signed-off-by: Michael Tokarev --- meson.build | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/meson.build b/meson.build index b88867ca9d..450c48a9f0 100644 --- a/meson.build +++ b/meson.build @@ -3164,6 +3164,10 @@ modinfo_files = [] block_mods = [] softmmu_mods = [] foreach d, list : modules + if not (d == 'block' ? have_block : have_system) + continue + endif + foreach m, module_ss : list if enable_modules and targetos != 'windows' module_ss = module_ss.apply(config_all, strict: false) From 89640e03ecfbe5eb05f0b39cdc83d93fbff0c739 Mon Sep 17 00:00:00 2001 From: Kevin Wolf Date: Wed, 3 May 2023 16:01:42 +0200 Subject: [PATCH 087/174] block: Fix use after free in blockdev_mark_auto_del() job_cancel_locked() drops the job list lock temporarily and it may call aio_poll(). We must assume that the list has changed after this call. Also, with unlucky timing, it can end up freeing the job during job_completed_txn_abort_locked(), making the job pointer invalid, too. For both reasons, we can't just continue at block_job_next_locked(job). Instead, start at the head of the list again after job_cancel_locked() and skip those jobs that we already cancelled (or that are completing anyway). Cc: qemu-stable@nongnu.org Signed-off-by: Kevin Wolf Message-Id: <20230503140142.474404-1-kwolf@redhat.com> Reviewed-by: Stefan Hajnoczi Signed-off-by: Kevin Wolf (cherry picked from commit e2626874a32602d4e52971c786ef5ffb4430629d) Signed-off-by: Michael Tokarev --- blockdev.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/blockdev.c b/blockdev.c index 3f1dec6242..ae27a41efa 100644 --- a/blockdev.c +++ b/blockdev.c @@ -152,12 +152,22 @@ void blockdev_mark_auto_del(BlockBackend *blk) JOB_LOCK_GUARD(); - for (job = block_job_next_locked(NULL); job; - job = block_job_next_locked(job)) { - if (block_job_has_bdrv(job, blk_bs(blk))) { + do { + job = block_job_next_locked(NULL); + while (job && (job->job.cancelled || + job->job.deferred_to_main_loop || + !block_job_has_bdrv(job, blk_bs(blk)))) + { + job = block_job_next_locked(job); + } + if (job) { + /* + * This drops the job lock temporarily and polls, so we need to + * restart processing the list from the start after this. + */ job_cancel_locked(&job->job, false); } - } + } while (job); dinfo->auto_del = 1; } From 666e6bbf85c4f2adc100784c8f27f7c4a8e5cc78 Mon Sep 17 00:00:00 2001 From: LIU Zhiwei Date: Fri, 24 Mar 2023 14:40:11 +0800 Subject: [PATCH 088/174] target/riscv: Fix itrigger when icount is used When I boot a ubuntu image, QEMU output a "Bad icount read" message and exit. The reason is that when execute helper_mret or helper_sret, it will cause a call to icount_get_raw_locked (), which needs set can_do_io flag on cpustate. Thus we setting this flag when execute these two instructions. Signed-off-by: LIU Zhiwei Reviewed-by: Weiwei Li Acked-by: Alistair Francis Message-Id: <20230324064011.976-1-zhiwei_liu@linux.alibaba.com> Signed-off-by: Alistair Francis (cherry picked from commit df3ac6da476e346a17bad5bc843de1135a269229) Signed-off-by: Michael Tokarev --- target/riscv/insn_trans/trans_privileged.c.inc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/target/riscv/insn_trans/trans_privileged.c.inc b/target/riscv/insn_trans/trans_privileged.c.inc index 3281408a87..74e2894462 100644 --- a/target/riscv/insn_trans/trans_privileged.c.inc +++ b/target/riscv/insn_trans/trans_privileged.c.inc @@ -77,6 +77,9 @@ static bool trans_sret(DisasContext *ctx, arg_sret *a) #ifndef CONFIG_USER_ONLY if (has_ext(ctx, RVS)) { decode_save_opc(ctx); + if (tb_cflags(ctx->base.tb) & CF_USE_ICOUNT) { + gen_io_start(); + } gen_helper_sret(cpu_pc, cpu_env); tcg_gen_exit_tb(NULL, 0); /* no chaining */ ctx->base.is_jmp = DISAS_NORETURN; @@ -93,6 +96,9 @@ static bool trans_mret(DisasContext *ctx, arg_mret *a) { #ifndef CONFIG_USER_ONLY decode_save_opc(ctx); + if (tb_cflags(ctx->base.tb) & CF_USE_ICOUNT) { + gen_io_start(); + } gen_helper_mret(cpu_pc, cpu_env); tcg_gen_exit_tb(NULL, 0); /* no chaining */ ctx->base.is_jmp = DISAS_NORETURN; From 0e262ee8e9c9f7c2adbaceb83920344533e2ed95 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Fri, 5 May 2023 21:40:49 +0100 Subject: [PATCH 089/174] accel/tcg: Fix atomic_mmu_lookup for reads MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A copy-paste bug had us looking at the victim cache for writes. Cc: qemu-stable@nongnu.org Reported-by: Peter Maydell Signed-off-by: Richard Henderson Fixes: 08dff435e2 ("tcg: Probe the proper permissions for atomic ops") Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Peter Maydell Message-Id: <20230505204049.352469-1-richard.henderson@linaro.org> (cherry picked from commit 8c313254e61ed47a1bf4a2db714b25cdd94fbcce) Signed-off-by: Michael Tokarev --- accel/tcg/cputlb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c index 6f1c00682b..1160aec626 100644 --- a/accel/tcg/cputlb.c +++ b/accel/tcg/cputlb.c @@ -1817,7 +1817,7 @@ static void *atomic_mmu_lookup(CPUArchState *env, target_ulong addr, } else /* if (prot & PAGE_READ) */ { tlb_addr = tlbe->addr_read; if (!tlb_hit(tlb_addr, addr)) { - if (!VICTIM_TLB_HIT(addr_write, addr)) { + if (!VICTIM_TLB_HIT(addr_read, addr)) { tlb_fill(env_cpu(env), addr, size, MMU_DATA_LOAD, mmu_idx, retaddr); index = tlb_index(env, mmu_idx, addr); From 379a05f3847f1b2b4b2a4b4845b56e264ec81572 Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Fri, 12 May 2023 15:43:38 +0100 Subject: [PATCH 090/174] ui: Fix pixel colour channel order for PNG screenshots MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When we take a PNG screenshot the ordering of the colour channels in the data is not correct, resulting in the image having weird colouring compared to the actual display. (Specifically, on a little-endian host the blue and red channels are swapped; on big-endian everything is wrong.) This happens because the pixman idea of the pixel data and the libpng idea differ. PIXMAN_a8r8g8b8 defines that pixels are 32-bit values, with A in bits 24-31, R in bits 16-23, G in bits 8-15 and B in bits 0-7. This means that on little-endian systems the bytes in memory are B G R A and on big-endian systems they are A R G B libpng, on the other hand, thinks of pixels as being a series of values for each channel, so its format PNG_COLOR_TYPE_RGB_ALPHA always wants bytes in the order R G B A This isn't the same as the pixman order for either big or little endian hosts. The alpha channel is also unnecessary bulk in the output PNG file, because there is no alpha information in a screenshot. To handle the endianness issue, we already define in ui/qemu-pixman.h various PIXMAN_BE_* and PIXMAN_LE_* values that give consistent byte-order pixel channel formats. So we can use PIXMAN_BE_r8g8b8 and PNG_COLOR_TYPE_RGB, which both have an in-memory byte order of R G B and 3 bytes per pixel. (PPM format screenshots get this right; they already use the PIXMAN_BE_r8g8b8 format.) Cc: qemu-stable@nongnu.org Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1622 Fixes: 9a0a119a382867 ("Added parameter to take screenshot with screendump as PNG") Signed-off-by: Peter Maydell Reviewed-by: Marc-André Lureau Message-id: 20230502135548.2451309-1-peter.maydell@linaro.org (cherry picked from commit cd22a0f520f471e3bd33bc19cf3b2fa772cdb2a8) Signed-off-by: Michael Tokarev --- ui/console.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui/console.c b/ui/console.c index 3c0d9b061a..646202214a 100644 --- a/ui/console.c +++ b/ui/console.c @@ -307,7 +307,7 @@ static bool png_save(int fd, pixman_image_t *image, Error **errp) png_struct *png_ptr; png_info *info_ptr; g_autoptr(pixman_image_t) linebuf = - qemu_pixman_linebuf_create(PIXMAN_a8r8g8b8, width); + qemu_pixman_linebuf_create(PIXMAN_BE_r8g8b8, width); uint8_t *buf = (uint8_t *)pixman_image_get_data(linebuf); FILE *f = fdopen(fd, "wb"); int y; @@ -337,7 +337,7 @@ static bool png_save(int fd, pixman_image_t *image, Error **errp) png_init_io(png_ptr, f); png_set_IHDR(png_ptr, info_ptr, width, height, 8, - PNG_COLOR_TYPE_RGB_ALPHA, PNG_INTERLACE_NONE, + PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); png_write_info(png_ptr, info_ptr); From c94d55f63e2c0bdc8114a09e106efe5de0810d84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Date: Thu, 20 Apr 2023 22:29:39 +0200 Subject: [PATCH 091/174] async: Suppress GCC13 false positive in aio_bh_poll() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GCC13 reports an error : ../util/async.c: In function ‘aio_bh_poll’: include/qemu/queue.h:303:22: error: storing the address of local variable ‘slice’ in ‘*ctx.bh_slice_list.sqh_last’ [-Werror=dangling-pointer=] 303 | (head)->sqh_last = &(elm)->field.sqe_next; \ | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~ ../util/async.c:169:5: note: in expansion of macro ‘QSIMPLEQ_INSERT_TAIL’ 169 | QSIMPLEQ_INSERT_TAIL(&ctx->bh_slice_list, &slice, next); | ^~~~~~~~~~~~~~~~~~~~ ../util/async.c:161:17: note: ‘slice’ declared here 161 | BHListSlice slice; | ^~~~~ ../util/async.c:161:17: note: ‘ctx’ declared here But the local variable 'slice' is removed from the global context list in following loop of the same routine. Add a pragma to silent GCC. Cc: Stefan Hajnoczi Cc: Paolo Bonzini Cc: Daniel P. Berrangé Signed-off-by: Cédric Le Goater Reviewed-by: Daniel Henrique Barboza Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Stefan Hajnoczi Reviewed-by: Thomas Huth Tested-by: Daniel Henrique Barboza Message-Id: <20230420202939.1982044-1-clg@kaod.org> Signed-off-by: Paolo Bonzini (cherry picked from commit d66ba6dc1cce914673bd8a89fca30a7715ea70d1) Signed-off-by: Michael Tokarev (Mjt: cherry-picked to stable-7.2 to eliminate CI failures on win*) --- util/async.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/util/async.c b/util/async.c index 63434ddae4..f449c3444e 100644 --- a/util/async.c +++ b/util/async.c @@ -158,7 +158,21 @@ int aio_bh_poll(AioContext *ctx) int ret = 0; QSLIST_MOVE_ATOMIC(&slice.bh_list, &ctx->bh_list); + + /* + * GCC13 [-Werror=dangling-pointer=] complains that the local variable + * 'slice' is being stored in the global 'ctx->bh_slice_list' but the + * list is emptied before this function returns. + */ +#if !defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpragmas" +#pragma GCC diagnostic ignored "-Wdangling-pointer=" +#endif QSIMPLEQ_INSERT_TAIL(&ctx->bh_slice_list, &slice, next); +#if !defined(__clang__) +#pragma GCC diagnostic pop +#endif while ((s = QSIMPLEQ_FIRST(&ctx->bh_slice_list))) { QEMUBH *bh; From afc11df42a031ae8b583c1480c5b1460b4eb84c5 Mon Sep 17 00:00:00 2001 From: Shivaprasad G Bhat Date: Thu, 4 May 2023 05:35:39 -0400 Subject: [PATCH 092/174] tcg: ppc64: Fix mask generation for vextractdm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In function do_extractm() the mask is calculated as dup_const(1 << (element_width - 1)). '1' being signed int works fine for MO_8,16,32. For MO_64, on PPC64 host this ends up becoming 0 on compilation. The vextractdm uses MO_64, and it ends up having mask as 0. Explicitly use 1ULL instead of signed int 1 like its used everywhere else. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1536 Signed-off-by: Shivaprasad G Bhat Reviewed-by: Alex Bennée Reviewed-by: Lucas Mateus Castro Reviewed-by: Richard Henderson Reviewed-by: Cédric Le Goater Message-Id: <168319292809.1159309.5817546227121323288.stgit@ltc-boston1.aus.stglabs.ibm.com> Signed-off-by: Daniel Henrique Barboza (cherry picked from commit 6a5d81b17201ab8a95539bad94c8a6c08a42e076) Signed-off-by: Michael Tokarev --- target/ppc/translate/vmx-impl.c.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/ppc/translate/vmx-impl.c.inc b/target/ppc/translate/vmx-impl.c.inc index 7741f2eb49..764b76dcc6 100644 --- a/target/ppc/translate/vmx-impl.c.inc +++ b/target/ppc/translate/vmx-impl.c.inc @@ -2231,7 +2231,7 @@ static bool trans_VEXPANDQM(DisasContext *ctx, arg_VX_tb *a) static bool do_vextractm(DisasContext *ctx, arg_VX_tb *a, unsigned vece) { const uint64_t elem_width = 8 << vece, elem_count_half = 8 >> vece, - mask = dup_const(vece, 1 << (elem_width - 1)); + mask = dup_const(vece, 1ULL << (elem_width - 1)); uint64_t i, j; TCGv_i64 lo, hi, t0, t1; From a641521e50c1664582568af3f169d51524767f30 Mon Sep 17 00:00:00 2001 From: Albert Esteve Date: Thu, 2 Mar 2023 13:17:19 +0100 Subject: [PATCH 093/174] hw/virtio/vhost-user: avoid using unitialized errp During protocol negotiation, when we the QEMU stub does not support a backend with F_CONFIG, it throws a warning and supresses the VHOST_USER_PROTOCOL_F_CONFIG bit. However, the warning uses warn_reportf_err macro and passes an unitialized errp pointer. However, the macro tries to edit the 'msg' member of the unitialized Error and segfaults. Instead, just use warn_report, which prints a warning message directly to the output. Fixes: 5653493 ("hw/virtio/vhost-user: don't suppress F_CONFIG when supported") Signed-off-by: Albert Esteve Message-Id: <20230302121719.9390-1-aesteve@redhat.com> Reviewed-by: Peter Maydell Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin (cherry picked from commit 90e31232cf8fa7f257263dd431ea954a1ae54bff) Signed-off-by: Michael Tokarev --- hw/virtio/vhost-user.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c index 8f635844af..1fc37f92be 100644 --- a/hw/virtio/vhost-user.c +++ b/hw/virtio/vhost-user.c @@ -2108,8 +2108,8 @@ static int vhost_user_backend_init(struct vhost_dev *dev, void *opaque, } else { if (virtio_has_feature(protocol_features, VHOST_USER_PROTOCOL_F_CONFIG)) { - warn_reportf_err(*errp, "vhost-user backend supports " - "VHOST_USER_PROTOCOL_F_CONFIG but QEMU does not."); + warn_report("vhost-user backend supports " + "VHOST_USER_PROTOCOL_F_CONFIG but QEMU does not."); protocol_features &= ~(1ULL << VHOST_USER_PROTOCOL_F_CONFIG); } } From 2a0afe1bde6a97bb499913b0fe043eb906d759b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20L=C3=B3pez?= Date: Thu, 2 Mar 2023 11:03:59 +0100 Subject: [PATCH 094/174] virtio: fix reachable assertion due to stale value of cached region size MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In virtqueue_{split,packed}_get_avail_bytes() descriptors are read in a loop via MemoryRegionCache regions and calls to vring_{split,packed}_desc_read() - these take a region cache and the index of the descriptor to be read. For direct descriptors we use a cache provided by the caller, whose size matches that of the virtqueue vring. We limit the number of descriptors we can read by the size of that vring: max = vq->vring.num; ... MemoryRegionCache *desc_cache = &caches->desc; For indirect descriptors, we initialize a new cache and limit the number of descriptors by the size of the intermediate descriptor: len = address_space_cache_init(&indirect_desc_cache, vdev->dma_as, desc.addr, desc.len, false); desc_cache = &indirect_desc_cache; ... max = desc.len / sizeof(VRingDesc); However, the first initialization of `max` is done outside the loop where we process guest descriptors, while the second one is done inside. This means that a sequence of an indirect descriptor followed by a direct one will leave a stale value in `max`. If the second descriptor's `next` field is smaller than the stale value, but greater than the size of the virtqueue ring (and thus the cached region), a failed assertion will be triggered in address_space_read_cached() down the call chain. Fix this by initializing `max` inside the loop in both functions. Fixes: 9796d0ac8fb0 ("virtio: use address_space_map/unmap to access descriptors") Signed-off-by: Carlos López Message-Id: <20230302100358.3613-1-clopez@suse.de> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin (cherry picked from commit bbc1c327d7974261c61566cdb950cc5fa0196b41) Signed-off-by: Michael Tokarev --- hw/virtio/virtio.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c index eb6347ab5d..384c8f0f08 100644 --- a/hw/virtio/virtio.c +++ b/hw/virtio/virtio.c @@ -1478,7 +1478,7 @@ static void virtqueue_split_get_avail_bytes(VirtQueue *vq, VRingMemoryRegionCaches *caches) { VirtIODevice *vdev = vq->vdev; - unsigned int max, idx; + unsigned int idx; unsigned int total_bufs, in_total, out_total; MemoryRegionCache indirect_desc_cache = MEMORY_REGION_CACHE_INVALID; int64_t len = 0; @@ -1487,13 +1487,12 @@ static void virtqueue_split_get_avail_bytes(VirtQueue *vq, idx = vq->last_avail_idx; total_bufs = in_total = out_total = 0; - max = vq->vring.num; - while ((rc = virtqueue_num_heads(vq, idx)) > 0) { MemoryRegionCache *desc_cache = &caches->desc; unsigned int num_bufs; VRingDesc desc; unsigned int i; + unsigned int max = vq->vring.num; num_bufs = total_bufs; @@ -1615,7 +1614,7 @@ static void virtqueue_packed_get_avail_bytes(VirtQueue *vq, VRingMemoryRegionCaches *caches) { VirtIODevice *vdev = vq->vdev; - unsigned int max, idx; + unsigned int idx; unsigned int total_bufs, in_total, out_total; MemoryRegionCache *desc_cache; MemoryRegionCache indirect_desc_cache = MEMORY_REGION_CACHE_INVALID; @@ -1627,14 +1626,14 @@ static void virtqueue_packed_get_avail_bytes(VirtQueue *vq, wrap_counter = vq->last_avail_wrap_counter; total_bufs = in_total = out_total = 0; - max = vq->vring.num; - for (;;) { unsigned int num_bufs = total_bufs; unsigned int i = idx; int rc; + unsigned int max = vq->vring.num; desc_cache = &caches->desc; + vring_packed_desc_read(vdev, &desc, desc_cache, idx, true); if (!is_desc_avail(desc.flags, wrap_counter)) { break; From b7b814cd87a5fbe9f0fb5732dd28932699317bda Mon Sep 17 00:00:00 2001 From: Wang Liang Date: Mon, 24 Apr 2023 18:39:02 +0800 Subject: [PATCH 095/174] block/monitor: Fix crash when executing HMP commit hmp_commit() calls blk_is_available() from a non-coroutine context (and in the main loop). blk_is_available() is a co_wrapper_mixed_bdrv_rdlock function, and in the non-coroutine context it calls AIO_WAIT_WHILE(), which crashes if the aio_context lock is not taken before. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1615 Signed-off-by: Wang Liang Message-Id: <20230424103902.45265-1-wangliangzz@126.com> Reviewed-by: Emanuele Giuseppe Esposito Reviewed-by: Kevin Wolf Signed-off-by: Kevin Wolf (cherry picked from commit 8c1e8fb2e7fc2cbeb57703e143965a4cd3ad301a) Signed-off-by: Michael Tokarev --- block/monitor/block-hmp-cmds.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/block/monitor/block-hmp-cmds.c b/block/monitor/block-hmp-cmds.c index b6135e9bfe..cf21b5e40a 100644 --- a/block/monitor/block-hmp-cmds.c +++ b/block/monitor/block-hmp-cmds.c @@ -213,15 +213,17 @@ void hmp_commit(Monitor *mon, const QDict *qdict) error_report("Device '%s' not found", device); return; } - if (!blk_is_available(blk)) { - error_report("Device '%s' has no medium", device); - return; - } bs = bdrv_skip_implicit_filters(blk_bs(blk)); aio_context = bdrv_get_aio_context(bs); aio_context_acquire(aio_context); + if (!blk_is_available(blk)) { + error_report("Device '%s' has no medium", device); + aio_context_release(aio_context); + return; + } + ret = bdrv_commit(bs); aio_context_release(aio_context); From 6b718596862f21d09c69c6875f57a3c474459c25 Mon Sep 17 00:00:00 2001 From: Ilya Leoshkevich Date: Thu, 27 Apr 2023 01:58:12 +0200 Subject: [PATCH 096/174] target/s390x: Fix EXECUTE of relative branches Fix a problem similar to the one fixed by commit 703d03a4aaf3 ("target/s390x: Fix EXECUTE of relative long instructions"), but now for relative branches. Reported-by: Nina Schoetterl-Glausch Signed-off-by: Ilya Leoshkevich Reviewed-by: Richard Henderson Message-Id: <20230426235813.198183-2-iii@linux.ibm.com> Signed-off-by: Thomas Huth (cherry picked from commit e8ecdfeb30f087574191cde523e846e023911c8d) Signed-off-by: Michael Tokarev --- target/s390x/tcg/translate.c | 81 ++++++++++++++++++++++++++---------- 1 file changed, 58 insertions(+), 23 deletions(-) diff --git a/target/s390x/tcg/translate.c b/target/s390x/tcg/translate.c index e328aa5b97..0885bf2641 100644 --- a/target/s390x/tcg/translate.c +++ b/target/s390x/tcg/translate.c @@ -1585,18 +1585,51 @@ static DisasJumpType op_bal(DisasContext *s, DisasOps *o) } } +/* + * Disassemble the target of a branch. The results are returned in a form + * suitable for passing into help_branch(): + * + * - bool IS_IMM reflects whether the target is fixed or computed. Non-EXECUTEd + * branches, whose DisasContext *S contains the relative immediate field RI, + * are considered fixed. All the other branches are considered computed. + * - int IMM is the value of RI. + * - TCGv_i64 CDEST is the address of the computed target. + */ +#define disas_jdest(s, ri, is_imm, imm, cdest) do { \ + if (have_field(s, ri)) { \ + if (unlikely(s->ex_value)) { \ + cdest = tcg_temp_new_i64(); \ + tcg_gen_ld_i64(cdest, cpu_env, offsetof(CPUS390XState, ex_target));\ + tcg_gen_addi_i64(cdest, cdest, (int64_t)get_field(s, ri) * 2); \ + is_imm = false; \ + } else { \ + is_imm = true; \ + } \ + } else { \ + is_imm = false; \ + } \ + imm = is_imm ? get_field(s, ri) : 0; \ +} while (false) + static DisasJumpType op_basi(DisasContext *s, DisasOps *o) { + DisasCompare c; + bool is_imm; + int imm; + pc_to_link_info(o->out, s, s->pc_tmp); - return help_goto_direct(s, s->base.pc_next + (int64_t)get_field(s, i2) * 2); + + disas_jdest(s, i2, is_imm, imm, o->in2); + disas_jcc(s, &c, 0xf); + return help_branch(s, &c, is_imm, imm, o->in2); } static DisasJumpType op_bc(DisasContext *s, DisasOps *o) { int m1 = get_field(s, m1); - bool is_imm = have_field(s, i2); - int imm = is_imm ? get_field(s, i2) : 0; DisasCompare c; + bool is_imm; + int imm; /* BCR with R2 = 0 causes no branching */ if (have_field(s, r2) && get_field(s, r2) == 0) { @@ -1613,6 +1646,7 @@ static DisasJumpType op_bc(DisasContext *s, DisasOps *o) return DISAS_NEXT; } + disas_jdest(s, i2, is_imm, imm, o->in2); disas_jcc(s, &c, m1); return help_branch(s, &c, is_imm, imm, o->in2); } @@ -1620,10 +1654,10 @@ static DisasJumpType op_bc(DisasContext *s, DisasOps *o) static DisasJumpType op_bct32(DisasContext *s, DisasOps *o) { int r1 = get_field(s, r1); - bool is_imm = have_field(s, i2); - int imm = is_imm ? get_field(s, i2) : 0; DisasCompare c; + bool is_imm; TCGv_i64 t; + int imm; c.cond = TCG_COND_NE; c.is_64 = false; @@ -1638,6 +1672,7 @@ static DisasJumpType op_bct32(DisasContext *s, DisasOps *o) tcg_gen_extrl_i64_i32(c.u.s32.a, t); tcg_temp_free_i64(t); + disas_jdest(s, i2, is_imm, imm, o->in2); return help_branch(s, &c, is_imm, imm, o->in2); } @@ -1668,9 +1703,9 @@ static DisasJumpType op_bcth(DisasContext *s, DisasOps *o) static DisasJumpType op_bct64(DisasContext *s, DisasOps *o) { int r1 = get_field(s, r1); - bool is_imm = have_field(s, i2); - int imm = is_imm ? get_field(s, i2) : 0; DisasCompare c; + bool is_imm; + int imm; c.cond = TCG_COND_NE; c.is_64 = true; @@ -1681,6 +1716,7 @@ static DisasJumpType op_bct64(DisasContext *s, DisasOps *o) c.u.s64.a = regs[r1]; c.u.s64.b = tcg_const_i64(0); + disas_jdest(s, i2, is_imm, imm, o->in2); return help_branch(s, &c, is_imm, imm, o->in2); } @@ -1688,10 +1724,10 @@ static DisasJumpType op_bx32(DisasContext *s, DisasOps *o) { int r1 = get_field(s, r1); int r3 = get_field(s, r3); - bool is_imm = have_field(s, i2); - int imm = is_imm ? get_field(s, i2) : 0; DisasCompare c; + bool is_imm; TCGv_i64 t; + int imm; c.cond = (s->insn->data ? TCG_COND_LE : TCG_COND_GT); c.is_64 = false; @@ -1707,6 +1743,7 @@ static DisasJumpType op_bx32(DisasContext *s, DisasOps *o) store_reg32_i64(r1, t); tcg_temp_free_i64(t); + disas_jdest(s, i2, is_imm, imm, o->in2); return help_branch(s, &c, is_imm, imm, o->in2); } @@ -1714,9 +1751,9 @@ static DisasJumpType op_bx64(DisasContext *s, DisasOps *o) { int r1 = get_field(s, r1); int r3 = get_field(s, r3); - bool is_imm = have_field(s, i2); - int imm = is_imm ? get_field(s, i2) : 0; DisasCompare c; + bool is_imm; + int imm; c.cond = (s->insn->data ? TCG_COND_LE : TCG_COND_GT); c.is_64 = true; @@ -1733,6 +1770,7 @@ static DisasJumpType op_bx64(DisasContext *s, DisasOps *o) c.u.s64.a = regs[r1]; c.g1 = true; + disas_jdest(s, i2, is_imm, imm, o->in2); return help_branch(s, &c, is_imm, imm, o->in2); } @@ -1750,10 +1788,9 @@ static DisasJumpType op_cj(DisasContext *s, DisasOps *o) c.u.s64.a = o->in1; c.u.s64.b = o->in2; - is_imm = have_field(s, i4); - if (is_imm) { - imm = get_field(s, i4); - } else { + o->out = NULL; + disas_jdest(s, i4, is_imm, imm, o->out); + if (!is_imm && !o->out) { imm = 0; o->out = get_address(s, 0, get_field(s, b4), get_field(s, d4)); @@ -5964,15 +6001,13 @@ static void in2_a2(DisasContext *s, DisasOps *o) static TCGv gen_ri2(DisasContext *s) { - int64_t delta = (int64_t)get_field(s, i2) * 2; - TCGv ri2; + TCGv ri2 = NULL; + bool is_imm; + int imm; - if (unlikely(s->ex_value)) { - ri2 = tcg_temp_new_i64(); - tcg_gen_ld_i64(ri2, cpu_env, offsetof(CPUS390XState, ex_target)); - tcg_gen_addi_i64(ri2, ri2, delta); - } else { - ri2 = tcg_constant_i64(s->base.pc_next + delta); + disas_jdest(s, i2, is_imm, imm, ri2); + if (is_imm) { + ri2 = tcg_constant_i64(s->base.pc_next + imm * 2); } return ri2; From 00acdd8a9f64a55def450210dca8be7e8cb55b5e Mon Sep 17 00:00:00 2001 From: Ilya Leoshkevich Date: Thu, 11 May 2023 15:47:26 +0200 Subject: [PATCH 097/174] s390x/tcg: Fix LDER instruction format It's RRE, not RXE. Found by running valgrind's none/tests/s390x/bfp-2. Fixes: 86b59624c4aa ("s390x/tcg: Implement LOAD LENGTHENED short HFP to long HFP") Reviewed-by: David Hildenbrand Signed-off-by: Ilya Leoshkevich Message-Id: <20230511134726.469651-1-iii@linux.ibm.com> Reviewed-by: Richard Henderson Signed-off-by: Thomas Huth (cherry picked from commit 970641de01908dd09b569965e78f13842e5854bc) Signed-off-by: Michael Tokarev (Mjt: context tweak) --- target/s390x/tcg/insn-data.h.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/s390x/tcg/insn-data.h.inc b/target/s390x/tcg/insn-data.h.inc index 2a5fc99818..13ffdda4da 100644 --- a/target/s390x/tcg/insn-data.h.inc +++ b/target/s390x/tcg/insn-data.h.inc @@ -606,7 +606,7 @@ F(0xed04, LDEB, RXE, Z, 0, m2_32u, new, f1, ldeb, 0, IF_BFP) F(0xed05, LXDB, RXE, Z, 0, m2_64, new_P, x1, lxdb, 0, IF_BFP) F(0xed06, LXEB, RXE, Z, 0, m2_32u, new_P, x1, lxeb, 0, IF_BFP) - F(0xb324, LDER, RXE, Z, 0, e2, new, f1, lde, 0, IF_AFP1) + F(0xb324, LDER, RRE, Z, 0, e2, new, f1, lde, 0, IF_AFP1) F(0xed24, LDE, RXE, Z, 0, m2_32u, new, f1, lde, 0, IF_AFP1) /* LOAD ROUNDED */ F(0xb344, LEDBR, RRF_e, Z, 0, f2, new, e1, ledb, 0, IF_BFP) From de6596aa9dc49916a095881f0afde4f11528da59 Mon Sep 17 00:00:00 2001 From: Jason Andryuk Date: Tue, 2 May 2023 10:37:22 -0400 Subject: [PATCH 098/174] 9pfs/xen: Fix segfault on shutdown xen_9pfs_free can't use gnttabdev since it is already closed and NULL-ed out when free is called. Do the teardown in _disconnect(). This matches the setup done in _connect(). trace-events are also added for the XenDevOps functions. Signed-off-by: Jason Andryuk Reviewed-by: Stefano Stabellini Message-Id: <20230502143722.15613-1-jandryuk@gmail.com> [C.S.: - Remove redundant return in xen_9pfs_free(). - Add comment to trace-events. ] Signed-off-by: Christian Schoenebeck (cherry picked from commit 92e667f6fd5806a6a705a2a43e572bd9ec6819da) Signed-off-by: Michael Tokarev (Mjt: minor context conflict in hw/9pfs/xen-9p-backend.c) --- hw/9pfs/trace-events | 6 ++++++ hw/9pfs/xen-9p-backend.c | 35 ++++++++++++++++++++++------------- 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/hw/9pfs/trace-events b/hw/9pfs/trace-events index 6c77966c0b..a12e55c165 100644 --- a/hw/9pfs/trace-events +++ b/hw/9pfs/trace-events @@ -48,3 +48,9 @@ v9fs_readlink(uint16_t tag, uint8_t id, int32_t fid) "tag %d id %d fid %d" v9fs_readlink_return(uint16_t tag, uint8_t id, char* target) "tag %d id %d name %s" v9fs_setattr(uint16_t tag, uint8_t id, int32_t fid, int32_t valid, int32_t mode, int32_t uid, int32_t gid, int64_t size, int64_t atime_sec, int64_t mtime_sec) "tag %u id %u fid %d iattr={valid %d mode %d uid %d gid %d size %"PRId64" atime=%"PRId64" mtime=%"PRId64" }" v9fs_setattr_return(uint16_t tag, uint8_t id) "tag %u id %u" + +# xen-9p-backend.c +xen_9pfs_alloc(char *name) "name %s" +xen_9pfs_connect(char *name) "name %s" +xen_9pfs_disconnect(char *name) "name %s" +xen_9pfs_free(char *name) "name %s" diff --git a/hw/9pfs/xen-9p-backend.c b/hw/9pfs/xen-9p-backend.c index 65c4979c3c..ab1df8dd2f 100644 --- a/hw/9pfs/xen-9p-backend.c +++ b/hw/9pfs/xen-9p-backend.c @@ -24,6 +24,8 @@ #include "qemu/option.h" #include "fsdev/qemu-fsdev.h" +#include "trace.h" + #define VERSIONS "1" #define MAX_RINGS 8 #define MAX_RING_ORDER 9 @@ -335,6 +337,8 @@ static void xen_9pfs_disconnect(struct XenLegacyDevice *xendev) Xen9pfsDev *xen_9pdev = container_of(xendev, Xen9pfsDev, xendev); int i; + trace_xen_9pfs_disconnect(xendev->name); + for (i = 0; i < xen_9pdev->num_rings; i++) { if (xen_9pdev->rings[i].evtchndev != NULL) { qemu_set_fd_handler(xenevtchn_fd(xen_9pdev->rings[i].evtchndev), @@ -343,39 +347,40 @@ static void xen_9pfs_disconnect(struct XenLegacyDevice *xendev) xen_9pdev->rings[i].local_port); xen_9pdev->rings[i].evtchndev = NULL; } - } -} - -static int xen_9pfs_free(struct XenLegacyDevice *xendev) -{ - Xen9pfsDev *xen_9pdev = container_of(xendev, Xen9pfsDev, xendev); - int i; - - if (xen_9pdev->rings[0].evtchndev != NULL) { - xen_9pfs_disconnect(xendev); - } - - for (i = 0; i < xen_9pdev->num_rings; i++) { if (xen_9pdev->rings[i].data != NULL) { xen_be_unmap_grant_refs(&xen_9pdev->xendev, xen_9pdev->rings[i].data, (1 << xen_9pdev->rings[i].ring_order)); + xen_9pdev->rings[i].data = NULL; } if (xen_9pdev->rings[i].intf != NULL) { xen_be_unmap_grant_refs(&xen_9pdev->xendev, xen_9pdev->rings[i].intf, 1); + xen_9pdev->rings[i].intf = NULL; } if (xen_9pdev->rings[i].bh != NULL) { qemu_bh_delete(xen_9pdev->rings[i].bh); + xen_9pdev->rings[i].bh = NULL; } } g_free(xen_9pdev->id); + xen_9pdev->id = NULL; g_free(xen_9pdev->tag); + xen_9pdev->tag = NULL; g_free(xen_9pdev->path); + xen_9pdev->path = NULL; g_free(xen_9pdev->security_model); + xen_9pdev->security_model = NULL; g_free(xen_9pdev->rings); + xen_9pdev->rings = NULL; +} + +static int xen_9pfs_free(struct XenLegacyDevice *xendev) +{ + trace_xen_9pfs_free(xendev->name); + return 0; } @@ -387,6 +392,8 @@ static int xen_9pfs_connect(struct XenLegacyDevice *xendev) V9fsState *s = &xen_9pdev->state; QemuOpts *fsdev; + trace_xen_9pfs_connect(xendev->name); + if (xenstore_read_fe_int(&xen_9pdev->xendev, "num-rings", &xen_9pdev->num_rings) == -1 || xen_9pdev->num_rings > MAX_RINGS || xen_9pdev->num_rings < 1) { @@ -494,6 +501,8 @@ out: static void xen_9pfs_alloc(struct XenLegacyDevice *xendev) { + trace_xen_9pfs_alloc(xendev->name); + xenstore_write_be_str(xendev, "versions", VERSIONS); xenstore_write_be_int(xendev, "max-rings", MAX_RINGS); xenstore_write_be_int(xendev, "max-ring-page-order", MAX_RING_ORDER); From 6bebd3f81842e1303122311d133d380f2792590a Mon Sep 17 00:00:00 2001 From: Chuck Zmudzinski Date: Sat, 21 Jan 2023 19:57:02 -0500 Subject: [PATCH 099/174] xen/pt: reserve PCI slot 2 for Intel igd-passthru Intel specifies that the Intel IGD must occupy slot 2 on the PCI bus, as noted in docs/igd-assign.txt in the Qemu source code. Currently, when the xl toolstack is used to configure a Xen HVM guest with Intel IGD passthrough to the guest with the Qemu upstream device model, a Qemu emulated PCI device will occupy slot 2 and the Intel IGD will occupy a different slot. This problem often prevents the guest from booting. The only available workarounds are not good: Configure Xen HVM guests to use the old and no longer maintained Qemu traditional device model available from xenbits.xen.org which does reserve slot 2 for the Intel IGD or use the "pc" machine type instead of the "xenfv" machine type and add the xen platform device at slot 3 using a command line option instead of patching qemu to fix the "xenfv" machine type directly. The second workaround causes some degredation in startup performance such as a longer boot time and reduced resolution of the grub menu that is displayed on the monitor. This patch avoids that reduced startup performance when using the Qemu upstream device model for Xen HVM guests configured with the igd-passthru=on option. To implement this feature in the Qemu upstream device model for Xen HVM guests, introduce the following new functions, types, and macros: * XEN_PT_DEVICE_CLASS declaration, based on the existing TYPE_XEN_PT_DEVICE * XEN_PT_DEVICE_GET_CLASS macro helper function for XEN_PT_DEVICE_CLASS * typedef XenPTQdevRealize function pointer * XEN_PCI_IGD_SLOT_MASK, the value of slot_reserved_mask to reserve slot 2 * xen_igd_reserve_slot and xen_igd_clear_slot functions Michael Tsirkin: * Introduce XEN_PCI_IGD_DOMAIN, XEN_PCI_IGD_BUS, XEN_PCI_IGD_DEV, and XEN_PCI_IGD_FN - use them to compute the value of XEN_PCI_IGD_SLOT_MASK The new xen_igd_reserve_slot function uses the existing slot_reserved_mask member of PCIBus to reserve PCI slot 2 for Xen HVM guests configured using the xl toolstack with the gfx_passthru option enabled, which sets the igd-passthru=on option to Qemu for the Xen HVM machine type. The new xen_igd_reserve_slot function also needs to be implemented in hw/xen/xen_pt_stub.c to prevent FTBFS during the link stage for the case when Qemu is configured with --enable-xen and --disable-xen-pci-passthrough, in which case it does nothing. The new xen_igd_clear_slot function overrides qdev->realize of the parent PCI device class to enable the Intel IGD to occupy slot 2 on the PCI bus since slot 2 was reserved by xen_igd_reserve_slot when the PCI bus was created in hw/i386/pc_piix.c for the case when igd-passthru=on. Move the call to xen_host_pci_device_get, and the associated error handling, from xen_pt_realize to the new xen_igd_clear_slot function to initialize the device class and vendor values which enables the checks for the Intel IGD to succeed. The verification that the host device is an Intel IGD to be passed through is done by checking the domain, bus, slot, and function values as well as by checking that gfx_passthru is enabled, the device class is VGA, and the device vendor in Intel. Signed-off-by: Chuck Zmudzinski Reviewed-by: Michael S. Tsirkin Reviewed-by: Stefano Stabellini Message-Id: Signed-off-by: Anthony PERARD (cherry picked from commit 4f67543bb8c5b031c2ad3785c1a2f3c255d72b25) Signed-off-by: Michael Tokarev --- hw/i386/pc_piix.c | 1 + hw/xen/xen_pt.c | 64 ++++++++++++++++++++++++++++++++++++-------- hw/xen/xen_pt.h | 20 ++++++++++++++ hw/xen/xen_pt_stub.c | 4 +++ 4 files changed, 78 insertions(+), 11 deletions(-) diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c index 24616bf924..04f793cca1 100644 --- a/hw/i386/pc_piix.c +++ b/hw/i386/pc_piix.c @@ -405,6 +405,7 @@ static void pc_xen_hvm_init(MachineState *machine) } pc_xen_hvm_init_pci(machine); + xen_igd_reserve_slot(pcms->bus); pci_create_simple(pcms->bus, -1, "xen-platform"); } #endif diff --git a/hw/xen/xen_pt.c b/hw/xen/xen_pt.c index 0ec7e52183..5dd706efbf 100644 --- a/hw/xen/xen_pt.c +++ b/hw/xen/xen_pt.c @@ -57,6 +57,7 @@ #include #include "hw/pci/pci.h" +#include "hw/pci/pci_bus.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/xen/xen.h" @@ -780,15 +781,6 @@ static void xen_pt_realize(PCIDevice *d, Error **errp) s->hostaddr.bus, s->hostaddr.slot, s->hostaddr.function, s->dev.devfn); - xen_host_pci_device_get(&s->real_device, - s->hostaddr.domain, s->hostaddr.bus, - s->hostaddr.slot, s->hostaddr.function, - errp); - if (*errp) { - error_append_hint(errp, "Failed to \"open\" the real pci device"); - return; - } - s->is_virtfn = s->real_device.is_virtfn; if (s->is_virtfn) { XEN_PT_LOG(d, "%04x:%02x:%02x.%d is a SR-IOV Virtual Function\n", @@ -803,8 +795,10 @@ static void xen_pt_realize(PCIDevice *d, Error **errp) s->io_listener = xen_pt_io_listener; /* Setup VGA bios for passthrough GFX */ - if ((s->real_device.domain == 0) && (s->real_device.bus == 0) && - (s->real_device.dev == 2) && (s->real_device.func == 0)) { + if ((s->real_device.domain == XEN_PCI_IGD_DOMAIN) && + (s->real_device.bus == XEN_PCI_IGD_BUS) && + (s->real_device.dev == XEN_PCI_IGD_DEV) && + (s->real_device.func == XEN_PCI_IGD_FN)) { if (!is_igd_vga_passthrough(&s->real_device)) { error_setg(errp, "Need to enable igd-passthru if you're trying" " to passthrough IGD GFX"); @@ -950,11 +944,58 @@ static void xen_pci_passthrough_instance_init(Object *obj) PCI_DEVICE(obj)->cap_present |= QEMU_PCI_CAP_EXPRESS; } +void xen_igd_reserve_slot(PCIBus *pci_bus) +{ + if (!xen_igd_gfx_pt_enabled()) { + return; + } + + XEN_PT_LOG(0, "Reserving PCI slot 2 for IGD\n"); + pci_bus->slot_reserved_mask |= XEN_PCI_IGD_SLOT_MASK; +} + +static void xen_igd_clear_slot(DeviceState *qdev, Error **errp) +{ + ERRP_GUARD(); + PCIDevice *pci_dev = (PCIDevice *)qdev; + XenPCIPassthroughState *s = XEN_PT_DEVICE(pci_dev); + XenPTDeviceClass *xpdc = XEN_PT_DEVICE_GET_CLASS(s); + PCIBus *pci_bus = pci_get_bus(pci_dev); + + xen_host_pci_device_get(&s->real_device, + s->hostaddr.domain, s->hostaddr.bus, + s->hostaddr.slot, s->hostaddr.function, + errp); + if (*errp) { + error_append_hint(errp, "Failed to \"open\" the real pci device"); + return; + } + + if (!(pci_bus->slot_reserved_mask & XEN_PCI_IGD_SLOT_MASK)) { + xpdc->pci_qdev_realize(qdev, errp); + return; + } + + if (is_igd_vga_passthrough(&s->real_device) && + s->real_device.domain == XEN_PCI_IGD_DOMAIN && + s->real_device.bus == XEN_PCI_IGD_BUS && + s->real_device.dev == XEN_PCI_IGD_DEV && + s->real_device.func == XEN_PCI_IGD_FN && + s->real_device.vendor_id == PCI_VENDOR_ID_INTEL) { + pci_bus->slot_reserved_mask &= ~XEN_PCI_IGD_SLOT_MASK; + XEN_PT_LOG(pci_dev, "Intel IGD found, using slot 2\n"); + } + xpdc->pci_qdev_realize(qdev, errp); +} + static void xen_pci_passthrough_class_init(ObjectClass *klass, void *data) { DeviceClass *dc = DEVICE_CLASS(klass); PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); + XenPTDeviceClass *xpdc = XEN_PT_DEVICE_CLASS(klass); + xpdc->pci_qdev_realize = dc->realize; + dc->realize = xen_igd_clear_slot; k->realize = xen_pt_realize; k->exit = xen_pt_unregister_device; k->config_read = xen_pt_pci_read_config; @@ -977,6 +1018,7 @@ static const TypeInfo xen_pci_passthrough_info = { .instance_size = sizeof(XenPCIPassthroughState), .instance_finalize = xen_pci_passthrough_finalize, .class_init = xen_pci_passthrough_class_init, + .class_size = sizeof(XenPTDeviceClass), .instance_init = xen_pci_passthrough_instance_init, .interfaces = (InterfaceInfo[]) { { INTERFACE_CONVENTIONAL_PCI_DEVICE }, diff --git a/hw/xen/xen_pt.h b/hw/xen/xen_pt.h index e7c4316a7d..292bdf7499 100644 --- a/hw/xen/xen_pt.h +++ b/hw/xen/xen_pt.h @@ -41,7 +41,20 @@ typedef struct XenPTReg XenPTReg; #define TYPE_XEN_PT_DEVICE "xen-pci-passthrough" OBJECT_DECLARE_SIMPLE_TYPE(XenPCIPassthroughState, XEN_PT_DEVICE) +#define XEN_PT_DEVICE_CLASS(klass) \ + OBJECT_CLASS_CHECK(XenPTDeviceClass, klass, TYPE_XEN_PT_DEVICE) +#define XEN_PT_DEVICE_GET_CLASS(obj) \ + OBJECT_GET_CLASS(XenPTDeviceClass, obj, TYPE_XEN_PT_DEVICE) + +typedef void (*XenPTQdevRealize)(DeviceState *qdev, Error **errp); + +typedef struct XenPTDeviceClass { + PCIDeviceClass parent_class; + XenPTQdevRealize pci_qdev_realize; +} XenPTDeviceClass; + uint32_t igd_read_opregion(XenPCIPassthroughState *s); +void xen_igd_reserve_slot(PCIBus *pci_bus); void igd_write_opregion(XenPCIPassthroughState *s, uint32_t val); void xen_igd_passthrough_isa_bridge_create(XenPCIPassthroughState *s, XenHostPCIDevice *dev); @@ -76,6 +89,13 @@ typedef int (*xen_pt_conf_byte_read) #define XEN_PCI_INTEL_OPREGION 0xfc +#define XEN_PCI_IGD_DOMAIN 0 +#define XEN_PCI_IGD_BUS 0 +#define XEN_PCI_IGD_DEV 2 +#define XEN_PCI_IGD_FN 0 +#define XEN_PCI_IGD_SLOT_MASK \ + (1UL << PCI_SLOT(PCI_DEVFN(XEN_PCI_IGD_DEV, XEN_PCI_IGD_FN))) + typedef enum { XEN_PT_GRP_TYPE_HARDWIRED = 0, /* 0 Hardwired reg group */ XEN_PT_GRP_TYPE_EMU, /* emul reg group */ diff --git a/hw/xen/xen_pt_stub.c b/hw/xen/xen_pt_stub.c index 2d8cac8d54..5c108446a8 100644 --- a/hw/xen/xen_pt_stub.c +++ b/hw/xen/xen_pt_stub.c @@ -20,3 +20,7 @@ void xen_igd_gfx_pt_set(bool value, Error **errp) error_setg(errp, "Xen PCI passthrough support not built in"); } } + +void xen_igd_reserve_slot(PCIBus *pci_bus) +{ +} From 7620c12422bef5f98647511317de15b953d3ffe7 Mon Sep 17 00:00:00 2001 From: Greg Kurz Date: Thu, 19 Jan 2023 18:24:23 +0100 Subject: [PATCH 100/174] Revert "vhost-user: Monitor slave channel in vhost_user_read()" This reverts commit db8a3772e300c1a656331a92da0785d81667dc81. Motivation : this is breaking vhost-user with DPDK as reported in [0]. Received unexpected msg type. Expected 22 received 40 Fail to update device iotlb Received unexpected msg type. Expected 40 received 22 Received unexpected msg type. Expected 22 received 11 Fail to update device iotlb Received unexpected msg type. Expected 11 received 22 vhost VQ 1 ring restore failed: -71: Protocol error (71) Received unexpected msg type. Expected 22 received 11 Fail to update device iotlb Received unexpected msg type. Expected 11 received 22 vhost VQ 0 ring restore failed: -71: Protocol error (71) unable to start vhost net: 71: falling back on userspace virtio The failing sequence that leads to the first error is : - QEMU sends a VHOST_USER_GET_STATUS (40) request to DPDK on the master socket - QEMU starts a nested event loop in order to wait for the VHOST_USER_GET_STATUS response and to be able to process messages from the slave channel - DPDK sends a couple of legitimate IOTLB miss messages on the slave channel - QEMU processes each IOTLB request and sends VHOST_USER_IOTLB_MSG (22) updates on the master socket - QEMU assumes to receive a response for the latest VHOST_USER_IOTLB_MSG but it gets the response for the VHOST_USER_GET_STATUS instead The subsequent errors have the same root cause : the nested event loop breaks the order by design. It lures QEMU to expect responses to the latest message sent on the master socket to arrive first. Since this was only needed for DAX enablement which is still not merged upstream, just drop the code for now. A working solution will have to be merged later on. Likely protect the master socket with a mutex and service the slave channel with a separate thread, as discussed with Maxime in the mail thread below. [0] https://lore.kernel.org/qemu-devel/43145ede-89dc-280e-b953-6a2b436de395@redhat.com/ Reported-by: Yanghang Liu Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=2155173 Signed-off-by: Greg Kurz Message-Id: <20230119172424.478268-2-groug@kaod.org> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Acked-by: Stefan Hajnoczi Acked-by: Maxime Coquelin (cherry picked from commit f340a59d5a852d75ae34555723694c7e8eafbd0c) Signed-off-by: Michael Tokarev --- hw/virtio/vhost-user.c | 35 +++-------------------------------- 1 file changed, 3 insertions(+), 32 deletions(-) diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c index 1fc37f92be..d95f24ed24 100644 --- a/hw/virtio/vhost-user.c +++ b/hw/virtio/vhost-user.c @@ -356,35 +356,6 @@ end: return G_SOURCE_REMOVE; } -static gboolean slave_read(QIOChannel *ioc, GIOCondition condition, - gpointer opaque); - -/* - * This updates the read handler to use a new event loop context. - * Event sources are removed from the previous context : this ensures - * that events detected in the previous context are purged. They will - * be re-detected and processed in the new context. - */ -static void slave_update_read_handler(struct vhost_dev *dev, - GMainContext *ctxt) -{ - struct vhost_user *u = dev->opaque; - - if (!u->slave_ioc) { - return; - } - - if (u->slave_src) { - g_source_destroy(u->slave_src); - g_source_unref(u->slave_src); - } - - u->slave_src = qio_channel_add_watch_source(u->slave_ioc, - G_IO_IN | G_IO_HUP, - slave_read, dev, NULL, - ctxt); -} - static int vhost_user_read(struct vhost_dev *dev, VhostUserMsg *msg) { struct vhost_user *u = dev->opaque; @@ -406,7 +377,6 @@ static int vhost_user_read(struct vhost_dev *dev, VhostUserMsg *msg) * be prepared for re-entrancy. So we create a new one and switch chr * to use it. */ - slave_update_read_handler(dev, ctxt); qemu_chr_be_update_read_handlers(chr->chr, ctxt); qemu_chr_fe_add_watch(chr, G_IO_IN | G_IO_HUP, vhost_user_read_cb, &data); @@ -418,7 +388,6 @@ static int vhost_user_read(struct vhost_dev *dev, VhostUserMsg *msg) * context that have been processed by the nested loop are purged. */ qemu_chr_be_update_read_handlers(chr->chr, prev_ctxt); - slave_update_read_handler(dev, NULL); g_main_loop_unref(loop); g_main_context_unref(ctxt); @@ -1802,7 +1771,9 @@ static int vhost_setup_slave_channel(struct vhost_dev *dev) return -ECONNREFUSED; } u->slave_ioc = ioc; - slave_update_read_handler(dev, NULL); + u->slave_src = qio_channel_add_watch_source(u->slave_ioc, + G_IO_IN | G_IO_HUP, + slave_read, dev, NULL, NULL); if (reply_supported) { msg.hdr.flags |= VHOST_USER_NEED_REPLY_MASK; From 0c6e9547ae6de872fe4a6822ca99c6389141088c Mon Sep 17 00:00:00 2001 From: Greg Kurz Date: Thu, 19 Jan 2023 18:24:24 +0100 Subject: [PATCH 101/174] Revert "vhost-user: Introduce nested event loop in vhost_user_read()" This reverts commit a7f523c7d114d445c5d83aecdba3efc038e5a692. The nested event loop is broken by design. It's only user was removed. Drop the code as well so that nobody ever tries to use it again. I had to fix a couple of trivial conflicts around return values because of 025faa872bcf ("vhost-user: stick to -errno error return convention"). Signed-off-by: Greg Kurz Message-Id: <20230119172424.478268-3-groug@kaod.org> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Acked-by: Maxime Coquelin (cherry picked from commit 4382138f642f69fdbc79ebf4e93d84be8061191f) Signed-off-by: Michael Tokarev --- hw/virtio/vhost-user.c | 65 ++++-------------------------------------- 1 file changed, 5 insertions(+), 60 deletions(-) diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c index d95f24ed24..d92b026e1c 100644 --- a/hw/virtio/vhost-user.c +++ b/hw/virtio/vhost-user.c @@ -305,19 +305,8 @@ static int vhost_user_read_header(struct vhost_dev *dev, VhostUserMsg *msg) return 0; } -struct vhost_user_read_cb_data { - struct vhost_dev *dev; - VhostUserMsg *msg; - GMainLoop *loop; - int ret; -}; - -static gboolean vhost_user_read_cb(void *do_not_use, GIOCondition condition, - gpointer opaque) +static int vhost_user_read(struct vhost_dev *dev, VhostUserMsg *msg) { - struct vhost_user_read_cb_data *data = opaque; - struct vhost_dev *dev = data->dev; - VhostUserMsg *msg = data->msg; struct vhost_user *u = dev->opaque; CharBackend *chr = u->user->chr; uint8_t *p = (uint8_t *) msg; @@ -325,8 +314,7 @@ static gboolean vhost_user_read_cb(void *do_not_use, GIOCondition condition, r = vhost_user_read_header(dev, msg); if (r < 0) { - data->ret = r; - goto end; + return r; } /* validate message size is sane */ @@ -334,8 +322,7 @@ static gboolean vhost_user_read_cb(void *do_not_use, GIOCondition condition, error_report("Failed to read msg header." " Size %d exceeds the maximum %zu.", msg->hdr.size, VHOST_USER_PAYLOAD_SIZE); - data->ret = -EPROTO; - goto end; + return -EPROTO; } if (msg->hdr.size) { @@ -346,53 +333,11 @@ static gboolean vhost_user_read_cb(void *do_not_use, GIOCondition condition, int saved_errno = errno; error_report("Failed to read msg payload." " Read %d instead of %d.", r, msg->hdr.size); - data->ret = r < 0 ? -saved_errno : -EIO; - goto end; + return r < 0 ? -saved_errno : -EIO; } } -end: - g_main_loop_quit(data->loop); - return G_SOURCE_REMOVE; -} - -static int vhost_user_read(struct vhost_dev *dev, VhostUserMsg *msg) -{ - struct vhost_user *u = dev->opaque; - CharBackend *chr = u->user->chr; - GMainContext *prev_ctxt = chr->chr->gcontext; - GMainContext *ctxt = g_main_context_new(); - GMainLoop *loop = g_main_loop_new(ctxt, FALSE); - struct vhost_user_read_cb_data data = { - .dev = dev, - .loop = loop, - .msg = msg, - .ret = 0 - }; - - /* - * We want to be able to monitor the slave channel fd while waiting - * for chr I/O. This requires an event loop, but we can't nest the - * one to which chr is currently attached : its fd handlers might not - * be prepared for re-entrancy. So we create a new one and switch chr - * to use it. - */ - qemu_chr_be_update_read_handlers(chr->chr, ctxt); - qemu_chr_fe_add_watch(chr, G_IO_IN | G_IO_HUP, vhost_user_read_cb, &data); - - g_main_loop_run(loop); - - /* - * Restore the previous event loop context. This also destroys/recreates - * event sources : this guarantees that all pending events in the original - * context that have been processed by the nested loop are purged. - */ - qemu_chr_be_update_read_handlers(chr->chr, prev_ctxt); - - g_main_loop_unref(loop); - g_main_context_unref(ctxt); - - return data.ret; + return 0; } static int process_message_reply(struct vhost_dev *dev, From 273147b94254103f9b1b774989fad18b15489e78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Date: Tue, 21 Mar 2023 17:16:09 +0100 Subject: [PATCH 102/174] target/ppc: Fix helper_pminsn() prototype MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GCC13 reports an error: ../target/ppc/excp_helper.c:2625:6: error: conflicting types for ‘helper_pminsn’ due to enum/integer mismatch; have ‘void(CPUPPCState *, powerpc_pm_insn_t)’ {aka ‘void(struct CPUArchState *, powerpc_pm_insn_t)’} [-Werror=enum-int-mismatch] 2625 | void helper_pminsn(CPUPPCState *env, powerpc_pm_insn_t insn) | ^~~~~~~~~~~~~ In file included from /home/legoater/work/qemu/qemu.git/include/qemu/osdep.h:49, from ../target/ppc/excp_helper.c:19: /home/legoater/work/qemu/qemu.git/include/exec/helper-head.h:23:27: note: previous declaration of ‘helper_pminsn’ with type ‘void(CPUArchState *, uint32_t)’ {aka ‘void(CPUArchState *, unsigned int)’} 23 | #define HELPER(name) glue(helper_, name) | ^~~~~~~ Fixes: 7778a575c7 ("ppc: Add P7/P8 Power Management instructions") Signed-off-by: Cédric Le Goater Reviewed-by: Daniel Henrique Barboza Message-Id: <20230321161609.716474-4-clg@kaod.org> Reviewed-by: Richard Henderson Reviewed-by: Thomas Huth Signed-off-by: Thomas Huth (cherry picked from commit 07e4804fcde1559aaa335fd680487ba308d86fb3) Signed-off-by: Michael Tokarev --- target/ppc/excp_helper.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c index 94adcb766b..30bc2e6adf 100644 --- a/target/ppc/excp_helper.c +++ b/target/ppc/excp_helper.c @@ -2631,7 +2631,7 @@ void helper_scv(CPUPPCState *env, uint32_t lev) } } -void helper_pminsn(CPUPPCState *env, powerpc_pm_insn_t insn) +void helper_pminsn(CPUPPCState *env, uint32_t insn) { CPUState *cs; From e7f1150829b8855244e1a9568e996dea12628c67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Tue, 2 May 2023 15:20:59 +0100 Subject: [PATCH 103/174] tests/docker: bump the xtensa base to debian:11-slim MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stretch is going out of support so things like security updates will fail. As the toolchain itself is binary it hopefully won't mind the underlying OS being updated. Message-Id: <20230503091244.1450613-3-alex.bennee@linaro.org> Reviewed-by: Thomas Huth Reviewed-by: Juan Quintela Signed-off-by: Alex Bennée Reported-by: Richard Henderson (cherry picked from commit 3217b84f3cd813a7daffc64b26543c313f3a042a) Signed-off-by: Michael Tokarev --- tests/docker/dockerfiles/debian-xtensa-cross.docker | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/docker/dockerfiles/debian-xtensa-cross.docker b/tests/docker/dockerfiles/debian-xtensa-cross.docker index 2f11b3b7bc..aebfabdd6e 100644 --- a/tests/docker/dockerfiles/debian-xtensa-cross.docker +++ b/tests/docker/dockerfiles/debian-xtensa-cross.docker @@ -5,7 +5,7 @@ # using a prebuilt toolchains for Xtensa cores from: # https://github.com/foss-xtensa/toolchain/releases # -FROM docker.io/library/debian:stretch-slim +FROM docker.io/library/debian:11-slim RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt install -yy eatmydata && \ From 95cb7a725546bb1943e5d68e49f27fd20881f02e Mon Sep 17 00:00:00 2001 From: Daniil Kovalev Date: Tue, 4 Apr 2023 08:21:54 +0300 Subject: [PATCH 104/174] linux-user: Fix mips fp64 executables loading If a program requires fr1, we should set the FR bit of CP0 control status register and add F64 hardware flag. The corresponding `else if` branch statement is copied from the linux kernel sources (see `arch_check_elf` function in linux/arch/mips/kernel/elf.c). Signed-off-by: Daniil Kovalev Reviewed-by: Jiaxun Yang Message-Id: <20230404052153.16617-1-dkovalev@compiler-toolchain-for.me> Signed-off-by: Laurent Vivier (cherry picked from commit a0f8d2701b205d9d7986aa555e0566b13dc18fa0) Signed-off-by: Michael Tokarev --- linux-user/mips/cpu_loop.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/linux-user/mips/cpu_loop.c b/linux-user/mips/cpu_loop.c index d5c1c7941d..8735e58bad 100644 --- a/linux-user/mips/cpu_loop.c +++ b/linux-user/mips/cpu_loop.c @@ -290,7 +290,10 @@ void target_cpu_copy_regs(CPUArchState *env, struct target_pt_regs *regs) env->CP0_Status |= (1 << CP0St_FR); env->hflags |= MIPS_HFLAG_F64; } - } else if (!prog_req.fre && !prog_req.frdefault && + } else if (prog_req.fr1) { + env->CP0_Status |= (1 << CP0St_FR); + env->hflags |= MIPS_HFLAG_F64; + } else if (!prog_req.fre && !prog_req.frdefault && !prog_req.fr1 && !prog_req.single && !prog_req.soft) { fprintf(stderr, "qemu: Can't find a matching FPU mode\n"); exit(1); From 89bf901afb1876548f5391b46fcfc08ed328c70c Mon Sep 17 00:00:00 2001 From: Michael Tokarev Date: Sun, 9 Apr 2023 13:53:27 +0300 Subject: [PATCH 105/174] linux-user: fix getgroups/setgroups allocations linux-user getgroups(), setgroups(), getgroups32() and setgroups32() used alloca() to allocate grouplist arrays, with unchecked gidsetsize coming from the "guest". With NGROUPS_MAX being 65536 (linux, and it is common for an application to allocate NGROUPS_MAX for getgroups()), this means a typical allocation is half the megabyte on the stack. Which just overflows stack, which leads to immediate SIGSEGV in actual system getgroups() implementation. An example of such issue is aptitude, eg https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811087#72 Cap gidsetsize to NGROUPS_MAX (return EINVAL if it is larger than that), and use heap allocation for grouplist instead of alloca(). While at it, fix coding style and make all 4 implementations identical. Try to not impose random limits - for example, allow gidsetsize to be negative for getgroups() - just do not allocate negative-sized grouplist in this case but still do actual getgroups() call. But do not allow negative gidsetsize for setgroups() since its argument is unsigned. Capping by NGROUPS_MAX seems a bit arbitrary, - we can do more, it is not an error if set size will be NGROUPS_MAX+1. But we should not allow integer overflow for the array being allocated. Maybe it is enough to just call g_try_new() and return ENOMEM if it fails. Maybe there's also no need to convert setgroups() since this one is usually smaller and known beforehand (KERN_NGROUPS_MAX is actually 63, - this is apparently a kernel-imposed limit for runtime group set). The patch fixes aptitude segfault mentioned above. Signed-off-by: Michael Tokarev Message-Id: <20230409105327.1273372-1-mjt@msgid.tls.msk.ru> Signed-off-by: Laurent Vivier (cherry picked from commit 1e35d327890bdd117a67f79c52e637fb12bb1bf4) Signed-off-by: Michael Tokarev --- linux-user/syscall.c | 105 +++++++++++++++++++++++++++++-------------- 1 file changed, 71 insertions(+), 34 deletions(-) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 9ca30149d4..cedf22c5b5 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -11438,39 +11438,58 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1, { int gidsetsize = arg1; target_id *target_grouplist; - gid_t *grouplist; + g_autofree gid_t *grouplist = NULL; int i; - grouplist = alloca(gidsetsize * sizeof(gid_t)); - ret = get_errno(getgroups(gidsetsize, grouplist)); - if (gidsetsize == 0) - return ret; - if (!is_error(ret)) { - target_grouplist = lock_user(VERIFY_WRITE, arg2, gidsetsize * sizeof(target_id), 0); - if (!target_grouplist) - return -TARGET_EFAULT; - for(i = 0;i < ret; i++) - target_grouplist[i] = tswapid(high2lowgid(grouplist[i])); - unlock_user(target_grouplist, arg2, gidsetsize * sizeof(target_id)); + if (gidsetsize > NGROUPS_MAX) { + return -TARGET_EINVAL; } + if (gidsetsize > 0) { + grouplist = g_try_new(gid_t, gidsetsize); + if (!grouplist) { + return -TARGET_ENOMEM; + } + } + ret = get_errno(getgroups(gidsetsize, grouplist)); + if (!is_error(ret) && gidsetsize > 0) { + target_grouplist = lock_user(VERIFY_WRITE, arg2, + gidsetsize * sizeof(target_id), 0); + if (!target_grouplist) { + return -TARGET_EFAULT; + } + for (i = 0; i < ret; i++) { + target_grouplist[i] = tswapid(high2lowgid(grouplist[i])); + } + unlock_user(target_grouplist, arg2, + gidsetsize * sizeof(target_id)); + } + return ret; } - return ret; case TARGET_NR_setgroups: { int gidsetsize = arg1; target_id *target_grouplist; - gid_t *grouplist = NULL; + g_autofree gid_t *grouplist = NULL; int i; - if (gidsetsize) { - grouplist = alloca(gidsetsize * sizeof(gid_t)); - target_grouplist = lock_user(VERIFY_READ, arg2, gidsetsize * sizeof(target_id), 1); + + if (gidsetsize > NGROUPS_MAX || gidsetsize < 0) { + return -TARGET_EINVAL; + } + if (gidsetsize > 0) { + grouplist = g_try_new(gid_t, gidsetsize); + if (!grouplist) { + return -TARGET_ENOMEM; + } + target_grouplist = lock_user(VERIFY_READ, arg2, + gidsetsize * sizeof(target_id), 1); if (!target_grouplist) { return -TARGET_EFAULT; } for (i = 0; i < gidsetsize; i++) { grouplist[i] = low2highgid(tswapid(target_grouplist[i])); } - unlock_user(target_grouplist, arg2, 0); + unlock_user(target_grouplist, arg2, + gidsetsize * sizeof(target_id)); } return get_errno(setgroups(gidsetsize, grouplist)); } @@ -11755,41 +11774,59 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1, { int gidsetsize = arg1; uint32_t *target_grouplist; - gid_t *grouplist; + g_autofree gid_t *grouplist = NULL; int i; - grouplist = alloca(gidsetsize * sizeof(gid_t)); + if (gidsetsize > NGROUPS_MAX) { + return -TARGET_EINVAL; + } + if (gidsetsize > 0) { + grouplist = g_try_new(gid_t, gidsetsize); + if (!grouplist) { + return -TARGET_ENOMEM; + } + } ret = get_errno(getgroups(gidsetsize, grouplist)); - if (gidsetsize == 0) - return ret; - if (!is_error(ret)) { - target_grouplist = lock_user(VERIFY_WRITE, arg2, gidsetsize * 4, 0); + if (!is_error(ret) && gidsetsize > 0) { + target_grouplist = lock_user(VERIFY_WRITE, arg2, + gidsetsize * 4, 0); if (!target_grouplist) { return -TARGET_EFAULT; } - for(i = 0;i < ret; i++) + for (i = 0; i < ret; i++) { target_grouplist[i] = tswap32(grouplist[i]); + } unlock_user(target_grouplist, arg2, gidsetsize * 4); } + return ret; } - return ret; #endif #ifdef TARGET_NR_setgroups32 case TARGET_NR_setgroups32: { int gidsetsize = arg1; uint32_t *target_grouplist; - gid_t *grouplist; + g_autofree gid_t *grouplist = NULL; int i; - grouplist = alloca(gidsetsize * sizeof(gid_t)); - target_grouplist = lock_user(VERIFY_READ, arg2, gidsetsize * 4, 1); - if (!target_grouplist) { - return -TARGET_EFAULT; + if (gidsetsize > NGROUPS_MAX || gidsetsize < 0) { + return -TARGET_EINVAL; + } + if (gidsetsize > 0) { + grouplist = g_try_new(gid_t, gidsetsize); + if (!grouplist) { + return -TARGET_ENOMEM; + } + target_grouplist = lock_user(VERIFY_READ, arg2, + gidsetsize * 4, 1); + if (!target_grouplist) { + return -TARGET_EFAULT; + } + for (i = 0; i < gidsetsize; i++) { + grouplist[i] = tswap32(target_grouplist[i]); + } + unlock_user(target_grouplist, arg2, 0); } - for(i = 0;i < gidsetsize; i++) - grouplist[i] = tswap32(target_grouplist[i]); - unlock_user(target_grouplist, arg2, 0); return get_errno(setgroups(gidsetsize, grouplist)); } #endif From 08fd84005f8f40c1af22c72294b8f69b0069d089 Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Fri, 14 Apr 2023 10:33:58 -0500 Subject: [PATCH 106/174] migration: Handle block device inactivation failures better Consider what happens when performing a migration between two host machines connected to an NFS server serving multiple block devices to the guest, when the NFS server becomes unavailable. The migration attempts to inactivate all block devices on the source (a necessary step before the destination can take over); but if the NFS server is non-responsive, the attempt to inactivate can itself fail. When that happens, the destination fails to get the migrated guest (good, because the source wasn't able to flush everything properly): (qemu) qemu-kvm: load of migration failed: Input/output error at which point, our only hope for the guest is for the source to take back control. With the current code base, the host outputs a message, but then appears to resume: (qemu) qemu-kvm: qemu_savevm_state_complete_precopy_non_iterable: bdrv_inactivate_all() failed (-1) (src qemu)info status VM status: running but a second migration attempt now asserts: (src qemu) qemu-kvm: ../block.c:6738: int bdrv_inactivate_recurse(BlockDriverState *): Assertion `!(bs->open_flags & BDRV_O_INACTIVE)' failed. Whether the guest is recoverable on the source after the first failure is debatable, but what we do not want is to have qemu itself fail due to an assertion. It looks like the problem is as follows: In migration.c:migration_completion(), the source sets 'inactivate' to true (since COLO is not enabled), then tries savevm.c:qemu_savevm_state_complete_precopy() with a request to inactivate block devices. In turn, this calls block.c:bdrv_inactivate_all(), which fails when flushing runs up against the non-responsive NFS server. With savevm failing, we are now left in a state where some, but not all, of the block devices have been inactivated; but migration_completion() then jumps to 'fail' rather than 'fail_invalidate' and skips an attempt to reclaim those those disks by calling bdrv_activate_all(). Even if we do attempt to reclaim disks, we aren't taking note of failure there, either. Thus, we have reached a state where the migration engine has forgotten all state about whether a block device is inactive, because we did not set s->block_inactive in enough places; so migration allows the source to reach vm_start() and resume execution, violating the block layer invariant that the guest CPUs should not be restarted while a device is inactive. Note that the code in migration.c:migrate_fd_cancel() will also try to reactivate all block devices if s->block_inactive was set, but because we failed to set that flag after the first failure, the source assumes it has reclaimed all devices, even though it still has remaining inactivated devices and does not try again. Normally, qmp_cont() will also try to reactivate all disks (or correctly fail if the disks are not reclaimable because NFS is not yet back up), but the auto-resumption of the source after a migration failure does not go through qmp_cont(). And because we have left the block layer in an inconsistent state with devices still inactivated, the later migration attempt is hitting the assertion failure. Since it is important to not resume the source with inactive disks, this patch marks s->block_inactive before attempting inactivation, rather than after succeeding, in order to prevent any vm_start() until it has successfully reactivated all devices. See also https://bugzilla.redhat.com/show_bug.cgi?id=2058982 Signed-off-by: Eric Blake Reviewed-by: Juan Quintela Acked-by: Lukas Straub Tested-by: Lukas Straub Signed-off-by: Juan Quintela (cherry picked from commit 403d18ae384239876764bbfa111d6cc5dcb673d1) Signed-off-by: Michael Tokarev --- migration/migration.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index f485eea5fb..043d22e049 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -3328,13 +3328,11 @@ static void migration_completion(MigrationState *s) MIGRATION_STATUS_DEVICE); } if (ret >= 0) { + s->block_inactive = inactivate; qemu_file_set_rate_limit(s->to_dst_file, INT64_MAX); ret = qemu_savevm_state_complete_precopy(s->to_dst_file, false, inactivate); } - if (inactivate && ret >= 0) { - s->block_inactive = true; - } } qemu_mutex_unlock_iothread(); @@ -3402,6 +3400,7 @@ fail_invalidate: bdrv_activate_all(&local_err); if (local_err) { error_report_err(local_err); + s->block_inactive = true; } else { s->block_inactive = false; } From b514d5a89888ba76d3891fa34eb48e6d91128749 Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Thu, 20 Apr 2023 09:35:51 -0500 Subject: [PATCH 107/174] migration: Minor control flow simplification No need to declare a temporary variable. Suggested-by: Juan Quintela Fixes: 1df36e8c6289 ("migration: Handle block device inactivation failures better") Signed-off-by: Eric Blake Reviewed-by: Juan Quintela Signed-off-by: Juan Quintela (cherry picked from commit 5d39f44d7ac5c63f53d4d0900ceba9521bc27e49) Signed-off-by: Michael Tokarev --- migration/migration.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index 043d22e049..2c92ad9014 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -3320,7 +3320,6 @@ static void migration_completion(MigrationState *s) ret = global_state_store(); if (!ret) { - bool inactivate = !migrate_colo_enabled(); ret = vm_stop_force_state(RUN_STATE_FINISH_MIGRATE); trace_migration_completion_vm_stop(ret); if (ret >= 0) { @@ -3328,10 +3327,10 @@ static void migration_completion(MigrationState *s) MIGRATION_STATUS_DEVICE); } if (ret >= 0) { - s->block_inactive = inactivate; + s->block_inactive = !migrate_colo_enabled(); qemu_file_set_rate_limit(s->to_dst_file, INT64_MAX); ret = qemu_savevm_state_complete_precopy(s->to_dst_file, false, - inactivate); + s->block_inactive); } } qemu_mutex_unlock_iothread(); From 7405624def23e89a858983103e0fa81935b30ac4 Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Tue, 2 May 2023 15:52:12 -0500 Subject: [PATCH 108/174] migration: Attempt disk reactivation in more failure scenarios Commit fe904ea824 added a fail_inactivate label, which tries to reactivate disks on the source after a failure while s->state == MIGRATION_STATUS_ACTIVE, but didn't actually use the label if qemu_savevm_state_complete_precopy() failed. This failure to reactivate is also present in commit 6039dd5b1c (also covering the new s->state == MIGRATION_STATUS_DEVICE state) and 403d18ae (ensuring s->block_inactive is set more reliably). Consolidate the two labels back into one - no matter HOW migration is failed, if there is any chance we can reach vm_start() after having attempted inactivation, it is essential that we have tried to restart disks before then. This also makes the cleanup more like migrate_fd_cancel(). Suggested-by: Kevin Wolf Signed-off-by: Eric Blake Message-Id: <20230502205212.134680-1-eblake@redhat.com> Acked-by: Peter Xu Reviewed-by: Juan Quintela Reviewed-by: Kevin Wolf Signed-off-by: Kevin Wolf (cherry picked from commit 6dab4c93ecfae48e2e67b984d1032c1e988d3005) Signed-off-by: Michael Tokarev (Mjt: minor context tweak near added comment in migration/migration.c) --- migration/migration.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index 2c92ad9014..c19fb5cb3e 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -3327,6 +3327,11 @@ static void migration_completion(MigrationState *s) MIGRATION_STATUS_DEVICE); } if (ret >= 0) { + /* + * Inactivate disks except in COLO, and track that we + * have done so in order to remember to reactivate + * them if migration fails or is cancelled. + */ s->block_inactive = !migrate_colo_enabled(); qemu_file_set_rate_limit(s->to_dst_file, INT64_MAX); ret = qemu_savevm_state_complete_precopy(s->to_dst_file, false, @@ -3367,13 +3372,13 @@ static void migration_completion(MigrationState *s) rp_error = await_return_path_close_on_source(s); trace_migration_return_path_end_after(rp_error); if (rp_error) { - goto fail_invalidate; + goto fail; } } if (qemu_file_get_error(s->to_dst_file)) { trace_migration_completion_file_err(); - goto fail_invalidate; + goto fail; } if (migrate_colo_enabled() && s->state == MIGRATION_STATUS_ACTIVE) { @@ -3387,26 +3392,25 @@ static void migration_completion(MigrationState *s) return; -fail_invalidate: - /* If not doing postcopy, vm_start() will be called: let's regain - * control on images. - */ - if (s->state == MIGRATION_STATUS_ACTIVE || - s->state == MIGRATION_STATUS_DEVICE) { +fail: + if (s->block_inactive && (s->state == MIGRATION_STATUS_ACTIVE || + s->state == MIGRATION_STATUS_DEVICE)) { + /* + * If not doing postcopy, vm_start() will be called: let's + * regain control on images. + */ Error *local_err = NULL; qemu_mutex_lock_iothread(); bdrv_activate_all(&local_err); if (local_err) { error_report_err(local_err); - s->block_inactive = true; } else { s->block_inactive = false; } qemu_mutex_unlock_iothread(); } -fail: migrate_set_state(&s->state, current_active_state, MIGRATION_STATUS_FAILED); } From d68a13c6726611be70a2856b71efac8cdce0689e Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Thu, 18 May 2023 10:31:43 +0100 Subject: [PATCH 109/174] target/arm: Fix vd == vm overlap in sve_ldff1_z If vd == vm, copy vm to scratch, so that we can pre-zero the output and still access the gather indicies. Cc: qemu-stable@nongnu.org Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1612 Signed-off-by: Richard Henderson Message-id: 20230504104232.1877774-1-richard.henderson@linaro.org Reviewed-by: Peter Maydell Signed-off-by: Peter Maydell (cherry picked from commit a6771f2f5cbfbf312e2fb5b1627f38a6bf6321d0) Signed-off-by: Michael Tokarev --- target/arm/sve_helper.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/target/arm/sve_helper.c b/target/arm/sve_helper.c index 521fc9b969..27838fb6e2 100644 --- a/target/arm/sve_helper.c +++ b/target/arm/sve_helper.c @@ -6726,6 +6726,7 @@ void sve_ldff1_z(CPUARMState *env, void *vd, uint64_t *vg, void *vm, intptr_t reg_off; SVEHostPage info; target_ulong addr, in_page; + ARMVectorReg scratch; /* Skip to the first true predicate. */ reg_off = find_next_active(vg, 0, reg_max, esz); @@ -6735,6 +6736,11 @@ void sve_ldff1_z(CPUARMState *env, void *vd, uint64_t *vg, void *vm, return; } + /* Protect against overlap between vd and vm. */ + if (unlikely(vd == vm)) { + vm = memcpy(&scratch, vm, reg_max); + } + /* * Probe the first element, allowing faults. */ From 61f6b12cf3278a67677f17dea7278a70fb2069ac Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 10 May 2023 18:15:25 +0200 Subject: [PATCH 110/174] scsi-generic: fix buffer overflow on block limits inquiry MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Using linux 6.x guest, at boot time, an inquiry on a scsi-generic device makes qemu crash. This is caused by a buffer overflow when scsi-generic patches the block limits VPD page. Do the operations on a temporary on-stack buffer that is guaranteed to be large enough. Reported-by: Théo Maillart Analyzed-by: Théo Maillart Cc: qemu-stable@nongnu.org Signed-off-by: Paolo Bonzini (cherry picked from commit 9bd634b2f5e2f10fe35d7609eb83f30583f2e15a) Signed-off-by: Michael Tokarev --- hw/scsi/scsi-generic.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/hw/scsi/scsi-generic.c b/hw/scsi/scsi-generic.c index 92cce20a4d..d513870181 100644 --- a/hw/scsi/scsi-generic.c +++ b/hw/scsi/scsi-generic.c @@ -190,12 +190,16 @@ static int scsi_handle_inquiry_reply(SCSIGenericReq *r, SCSIDevice *s, int len) if ((s->type == TYPE_DISK || s->type == TYPE_ZBC) && (r->req.cmd.buf[1] & 0x01)) { page = r->req.cmd.buf[2]; - if (page == 0xb0) { + if (page == 0xb0 && r->buflen >= 8) { + uint8_t buf[16] = {}; + uint8_t buf_used = MIN(r->buflen, 16); uint64_t max_transfer = calculate_max_transfer(s); - stl_be_p(&r->buf[8], max_transfer); - /* Also take care of the opt xfer len. */ - stl_be_p(&r->buf[12], - MIN_NON_ZERO(max_transfer, ldl_be_p(&r->buf[12]))); + + memcpy(buf, r->buf, buf_used); + stl_be_p(&buf[8], max_transfer); + stl_be_p(&buf[12], MIN_NON_ZERO(max_transfer, ldl_be_p(&buf[12]))); + memcpy(r->buf + 8, buf + 8, buf_used - 8); + } else if (s->needs_vpd_bl_emulation && page == 0x00 && r->buflen >= 4) { /* * Now we're capable of supplying the VPD Block Limits From eee0666a501558d41b53a793fb0cfdc1e578294e Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Tue, 9 May 2023 16:17:15 +0200 Subject: [PATCH 111/174] target/i386: fix operand size for VCOMI/VUCOMI instructions Compared to other SSE instructions, VUCOMISx and VCOMISx are different: the single and double precision versions are distinguished through a prefix, however they use no-prefix and 0x66 for SS and SD respectively. Scalar values usually are associated with 0xF2 and 0xF3. Because of these, they incorrectly perform a 128-bit memory load instead of a 32- or 64-bit load. Fix this by writing a custom decoding function. I tested that the reproducer is fixed and the test-avx output does not change. Reported-by: Gabriele Svelto Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1637 Fixes: f8d19eec0d53 ("target/i386: reimplement 0x0f 0x28-0x2f, add AVX", 2022-10-18) Cc: qemu-stable@nongnu.org Signed-off-by: Paolo Bonzini (cherry picked from commit 2b55e479e6fcbb466585fd25077a50c32e10dc3a) Signed-off-by: Michael Tokarev --- target/i386/tcg/decode-new.c.inc | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/target/i386/tcg/decode-new.c.inc b/target/i386/tcg/decode-new.c.inc index 80c579164f..c2ee712561 100644 --- a/target/i386/tcg/decode-new.c.inc +++ b/target/i386/tcg/decode-new.c.inc @@ -782,6 +782,17 @@ static void decode_0F2D(DisasContext *s, CPUX86State *env, X86OpEntry *entry, ui *entry = *decode_by_prefix(s, opcodes_0F2D); } +static void decode_VxCOMISx(DisasContext *s, CPUX86State *env, X86OpEntry *entry, uint8_t *b) +{ + /* + * VUCOMISx and VCOMISx are different and use no-prefix and 0x66 for SS and SD + * respectively. Scalar values usually are associated with 0xF2 and 0xF3, for + * which X86_VEX_REPScalar exists, but here it has to be decoded by hand. + */ + entry->s1 = entry->s2 = (s->prefix & PREFIX_DATA ? X86_SIZE_sd : X86_SIZE_ss); + entry->gen = (*b == 0x2E ? gen_VUCOMI : gen_VCOMI); +} + static void decode_sse_unary(DisasContext *s, CPUX86State *env, X86OpEntry *entry, uint8_t *b) { if (!(s->prefix & (PREFIX_REPZ | PREFIX_REPNZ))) { @@ -870,8 +881,8 @@ static const X86OpEntry opcodes_0F[256] = { [0x2B] = X86_OP_GROUP0(0F2B), [0x2C] = X86_OP_GROUP0(0F2C), [0x2D] = X86_OP_GROUP0(0F2D), - [0x2E] = X86_OP_ENTRY3(VUCOMI, None,None, V,x, W,x, vex4 p_00_66), - [0x2F] = X86_OP_ENTRY3(VCOMI, None,None, V,x, W,x, vex4 p_00_66), + [0x2E] = X86_OP_GROUP3(VxCOMISx, None,None, V,x, W,x, vex3 p_00_66), /* VUCOMISS/SD */ + [0x2F] = X86_OP_GROUP3(VxCOMISx, None,None, V,x, W,x, vex3 p_00_66), /* VCOMISS/SD */ [0x38] = X86_OP_GROUP0(0F38), [0x3a] = X86_OP_GROUP0(0F3A), From 48b60eb6c917646df9efa7ddb4c25929f358d647 Mon Sep 17 00:00:00 2001 From: Xinyu Li Date: Wed, 10 May 2023 22:52:22 +0800 Subject: [PATCH 112/174] target/i386: fix avx2 instructions vzeroall and vpermdq vzeroall: xmm_regs should be used instead of xmm_t0 vpermdq: bit 3 and 7 of imm should be considered Signed-off-by: Xinyu Li Message-Id: <20230510145222.586487-1-lixinyu20s@ict.ac.cn> Cc: qemu-stable@nongnu.org Signed-off-by: Paolo Bonzini (cherry picked from commit 056d649007bc9fdae9f1d576e77c1316e9a34468) Signed-off-by: Michael Tokarev --- target/i386/ops_sse.h | 8 ++++++++ target/i386/tcg/emit.c.inc | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/target/i386/ops_sse.h b/target/i386/ops_sse.h index 3cbc36a59d..44c1e70093 100644 --- a/target/i386/ops_sse.h +++ b/target/i386/ops_sse.h @@ -2493,6 +2493,14 @@ void helper_vpermdq_ymm(Reg *d, Reg *v, Reg *s, uint32_t order) d->Q(1) = r1; d->Q(2) = r2; d->Q(3) = r3; + if (order & 0x8) { + d->Q(0) = 0; + d->Q(1) = 0; + } + if (order & 0x80) { + d->Q(2) = 0; + d->Q(3) = 0; + } } void helper_vpermq_ymm(Reg *d, Reg *s, uint32_t order) diff --git a/target/i386/tcg/emit.c.inc b/target/i386/tcg/emit.c.inc index 7296f3952c..5d31fce65d 100644 --- a/target/i386/tcg/emit.c.inc +++ b/target/i386/tcg/emit.c.inc @@ -2288,7 +2288,7 @@ static void gen_VZEROALL(DisasContext *s, CPUX86State *env, X86DecodedInsn *deco { TCGv_ptr ptr = tcg_temp_new_ptr(); - tcg_gen_addi_ptr(ptr, cpu_env, offsetof(CPUX86State, xmm_t0)); + tcg_gen_addi_ptr(ptr, cpu_env, offsetof(CPUX86State, xmm_regs)); gen_helper_memset(ptr, ptr, tcg_constant_i32(0), tcg_constant_ptr(CPU_NB_REGS * sizeof(ZMMReg))); tcg_temp_free_ptr(ptr); From 6f4dc62715265aca412de3f70a3302bc5712f6a4 Mon Sep 17 00:00:00 2001 From: Hawkins Jiawei Date: Tue, 9 May 2023 16:48:17 +0800 Subject: [PATCH 113/174] vhost: fix possible wrap in SVQ descriptor ring MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit QEMU invokes vhost_svq_add() when adding a guest's element into SVQ. In vhost_svq_add(), it uses vhost_svq_available_slots() to check whether QEMU can add the element into SVQ. If there is enough space, then QEMU combines some out descriptors and some in descriptors into one descriptor chain, and adds it into `svq->vring.desc` by vhost_svq_vring_write_descs(). Yet the problem is that, `svq->shadow_avail_idx - svq->shadow_used_idx` in vhost_svq_available_slots() returns the number of occupied elements, or the number of descriptor chains, instead of the number of occupied descriptors, which may cause wrapping in SVQ descriptor ring. Here is an example. In vhost_handle_guest_kick(), QEMU forwards as many available buffers to device by virtqueue_pop() and vhost_svq_add_element(). virtqueue_pop() returns a guest's element, and then this element is added into SVQ by vhost_svq_add_element(), a wrapper to vhost_svq_add(). If QEMU invokes virtqueue_pop() and vhost_svq_add_element() `svq->vring.num` times, vhost_svq_available_slots() thinks QEMU just ran out of slots and everything should work fine. But in fact, virtqueue_pop() returns `svq->vring.num` elements or descriptor chains, more than `svq->vring.num` descriptors due to guest memory fragmentation, and this causes wrapping in SVQ descriptor ring. This bug is valid even before marking the descriptors used. If the guest memory is fragmented, SVQ must add chains so it can try to add more descriptors than possible. This patch solves it by adding `num_free` field in VhostShadowVirtqueue structure and updating this field in vhost_svq_add() and vhost_svq_get_buf(), to record the number of free descriptors. Fixes: 100890f7ca ("vhost: Shadow virtqueue buffers forwarding") Signed-off-by: Hawkins Jiawei Acked-by: Eugenio Pérez Message-Id: <20230509084817.3973-1-yin31149@gmail.com> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Tested-by: Lei Yang (cherry picked from commit 5d410557dea452f6231a7c66155e29a37e168528) Signed-off-by: Michael Tokarev --- hw/virtio/vhost-shadow-virtqueue.c | 5 ++++- hw/virtio/vhost-shadow-virtqueue.h | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/hw/virtio/vhost-shadow-virtqueue.c b/hw/virtio/vhost-shadow-virtqueue.c index a723073747..d422418f2d 100644 --- a/hw/virtio/vhost-shadow-virtqueue.c +++ b/hw/virtio/vhost-shadow-virtqueue.c @@ -68,7 +68,7 @@ bool vhost_svq_valid_features(uint64_t features, Error **errp) */ static uint16_t vhost_svq_available_slots(const VhostShadowVirtqueue *svq) { - return svq->vring.num - (svq->shadow_avail_idx - svq->shadow_used_idx); + return svq->num_free; } /** @@ -263,6 +263,7 @@ int vhost_svq_add(VhostShadowVirtqueue *svq, const struct iovec *out_sg, return -EINVAL; } + svq->num_free -= ndescs; svq->desc_state[qemu_head].elem = elem; svq->desc_state[qemu_head].ndescs = ndescs; vhost_svq_kick(svq); @@ -449,6 +450,7 @@ static VirtQueueElement *vhost_svq_get_buf(VhostShadowVirtqueue *svq, last_used_chain = vhost_svq_last_desc_of_chain(svq, num, used_elem.id); svq->desc_next[last_used_chain] = svq->free_head; svq->free_head = used_elem.id; + svq->num_free += num; *len = used_elem.len; return g_steal_pointer(&svq->desc_state[used_elem.id].elem); @@ -656,6 +658,7 @@ void vhost_svq_start(VhostShadowVirtqueue *svq, VirtIODevice *vdev, svq->vq = vq; svq->vring.num = virtio_queue_get_num(vdev, virtio_get_queue_index(vq)); + svq->num_free = svq->vring.num; driver_size = vhost_svq_driver_area_size(svq); device_size = vhost_svq_device_area_size(svq); svq->vring.desc = qemu_memalign(qemu_real_host_page_size(), driver_size); diff --git a/hw/virtio/vhost-shadow-virtqueue.h b/hw/virtio/vhost-shadow-virtqueue.h index d04c34a589..328a7fc075 100644 --- a/hw/virtio/vhost-shadow-virtqueue.h +++ b/hw/virtio/vhost-shadow-virtqueue.h @@ -107,6 +107,9 @@ typedef struct VhostShadowVirtqueue { /* Next head to consume from the device */ uint16_t last_used_idx; + + /* Size of SVQ vring free descriptors */ + uint16_t num_free; } VhostShadowVirtqueue; bool vhost_svq_valid_features(uint64_t features, Error **errp); From dd63d3a5b8b312ba042a827441d62458ad63a374 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= Date: Thu, 4 May 2023 12:14:47 +0200 Subject: [PATCH 114/174] virtio-net: not enable vq reset feature unconditionally MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The commit 93a97dc5200a ("virtio-net: enable vq reset feature") enables unconditionally vq reset feature as long as the device is emulated. This makes impossible to actually disable the feature, and it causes migration problems from qemu version previous than 7.2. The entire final commit is unneeded as device system already enable or disable the feature properly. This reverts commit 93a97dc5200a95e63b99cb625f20b7ae802ba413. Fixes: 93a97dc5200a ("virtio-net: enable vq reset feature") Signed-off-by: Eugenio Pérez Message-Id: <20230504101447.389398-1-eperezma@redhat.com> Reviewed-by: Xuan Zhuo Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin (cherry picked from commit 1fac00f70b3261050af5564b20ca55c1b2a3059a) Signed-off-by: Michael Tokarev --- hw/net/virtio-net.c | 1 - 1 file changed, 1 deletion(-) diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c index aba12759d5..4abd49e298 100644 --- a/hw/net/virtio-net.c +++ b/hw/net/virtio-net.c @@ -802,7 +802,6 @@ static uint64_t virtio_net_get_features(VirtIODevice *vdev, uint64_t features, } if (!get_vhost_net(nc->peer)) { - virtio_add_feature(&features, VIRTIO_F_RING_RESET); return features; } From 926a8380f2eb2dcb3c455b4382f4dac5c980ecba Mon Sep 17 00:00:00 2001 From: Mauro Matteo Cascella Date: Tue, 9 May 2023 09:53:17 +0200 Subject: [PATCH 115/174] virtio-crypto: fix NULL pointer dereference in virtio_crypto_free_request Ensure op_info is not NULL in case of QCRYPTODEV_BACKEND_ALG_SYM algtype. Fixes: 0e660a6f90a ("crypto: Introduce RSA algorithm") Signed-off-by: Mauro Matteo Cascella Reported-by: Yiming Tao Message-Id: <20230509075317.1132301-1-mcascell@redhat.com> Reviewed-by: Gonglei Reviewed-by: zhenwei pi Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin (cherry picked from commit 3e69908907f8d3dd20d5753b0777a6e3824ba824) Signed-off-by: Michael Tokarev (Mjt: context tweak after 999c789f00 cryptodev: Introduce cryptodev alg type in QAPI) --- hw/virtio/virtio-crypto.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/hw/virtio/virtio-crypto.c b/hw/virtio/virtio-crypto.c index 97da74e719..a6dbdd32da 100644 --- a/hw/virtio/virtio-crypto.c +++ b/hw/virtio/virtio-crypto.c @@ -476,15 +476,17 @@ static void virtio_crypto_free_request(VirtIOCryptoReq *req) size_t max_len; CryptoDevBackendSymOpInfo *op_info = req->op_info.u.sym_op_info; - max_len = op_info->iv_len + - op_info->aad_len + - op_info->src_len + - op_info->dst_len + - op_info->digest_result_len; + if (op_info) { + max_len = op_info->iv_len + + op_info->aad_len + + op_info->src_len + + op_info->dst_len + + op_info->digest_result_len; - /* Zeroize and free request data structure */ - memset(op_info, 0, sizeof(*op_info) + max_len); - g_free(op_info); + /* Zeroize and free request data structure */ + memset(op_info, 0, sizeof(*op_info) + max_len); + g_free(op_info); + } } else if (req->flags == CRYPTODEV_BACKEND_ALG_ASYM) { CryptoDevBackendAsymOpInfo *op_info = req->op_info.u.asym_op_info; if (op_info) { From f9f42e708f33fc54b2943b8f585d1d8f258cba49 Mon Sep 17 00:00:00 2001 From: Akihiko Odaki Date: Thu, 23 Feb 2023 19:20:15 +0900 Subject: [PATCH 116/174] e1000: Count CRC in Tx statistics The Software Developer's Manual 13.7.4.5 "Packets Transmitted (64 Bytes) Count" says: > This register counts the number of packets transmitted that are > exactly 64 bytes (from through , > inclusively) in length. It also says similar for the other Tx statistics registers. Add the number of bytes for CRC to those registers. Signed-off-by: Akihiko Odaki Signed-off-by: Jason Wang (cherry picked from commit c50b152485d4e10dfa1e1d7ea668f29a5fb92e9c) Signed-off-by: Michael Tokarev (Mjt: pick this for 7.2 too: a fix by its own and makes next patch to apply cleanly) --- hw/net/e1000.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/net/e1000.c b/hw/net/e1000.c index e26e0a64c1..9cd3d6f495 100644 --- a/hw/net/e1000.c +++ b/hw/net/e1000.c @@ -567,7 +567,7 @@ e1000_send_packet(E1000State *s, const uint8_t *buf, int size) qemu_send_packet(nc, buf, size); } inc_tx_bcast_or_mcast_count(s, buf); - e1000x_increase_size_stats(s->mac_reg, PTCregs, size); + e1000x_increase_size_stats(s->mac_reg, PTCregs, size + 4); } static void @@ -631,7 +631,7 @@ xmit_seg(E1000State *s) } e1000x_inc_reg_if_not_full(s->mac_reg, TPT); - e1000x_grow_8reg_if_not_full(s->mac_reg, TOTL, s->tx.size); + e1000x_grow_8reg_if_not_full(s->mac_reg, TOTL, s->tx.size + 4); s->mac_reg[GPTC] = s->mac_reg[TPT]; s->mac_reg[GOTCL] = s->mac_reg[TOTL]; s->mac_reg[GOTCH] = s->mac_reg[TOTH]; From b121ebe143e575de85f2ef2525bba57adb5ac35a Mon Sep 17 00:00:00 2001 From: "timothee.cocault@gmail.com" Date: Mon, 10 Apr 2023 17:27:48 +0200 Subject: [PATCH 117/174] e1000e: Fix tx/rx counters MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The bytes and packets counter registers are cleared on read. Copying the "total counter" registers to the "good counter" registers has side effects. If the "total" register is never read by the OS, it only gets incremented. This leads to exponential growth of the "good" register. This commit increments the counters individually to avoid this. Signed-off-by: Timothée Cocault Signed-off-by: Jason Wang (cherry picked from commit 8d689f6aae8be096b4a1859be07c1b083865f755) Signed-off-by: Michael Tokarev (Mjt: removed hw/net/igb_core.c part: igb introduced in 8.0) --- hw/net/e1000.c | 5 ++--- hw/net/e1000e_core.c | 5 ++--- hw/net/e1000x_common.c | 5 ++--- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/hw/net/e1000.c b/hw/net/e1000.c index 9cd3d6f495..0dfdf47313 100644 --- a/hw/net/e1000.c +++ b/hw/net/e1000.c @@ -632,9 +632,8 @@ xmit_seg(E1000State *s) e1000x_inc_reg_if_not_full(s->mac_reg, TPT); e1000x_grow_8reg_if_not_full(s->mac_reg, TOTL, s->tx.size + 4); - s->mac_reg[GPTC] = s->mac_reg[TPT]; - s->mac_reg[GOTCL] = s->mac_reg[TOTL]; - s->mac_reg[GOTCH] = s->mac_reg[TOTH]; + e1000x_inc_reg_if_not_full(s->mac_reg, GPTC); + e1000x_grow_8reg_if_not_full(s->mac_reg, GOTCL, s->tx.size + 4); } static void diff --git a/hw/net/e1000e_core.c b/hw/net/e1000e_core.c index fc9cdb4528..c71d82ce1d 100644 --- a/hw/net/e1000e_core.c +++ b/hw/net/e1000e_core.c @@ -687,9 +687,8 @@ e1000e_on_tx_done_update_stats(E1000ECore *core, struct NetTxPkt *tx_pkt) g_assert_not_reached(); } - core->mac[GPTC] = core->mac[TPT]; - core->mac[GOTCL] = core->mac[TOTL]; - core->mac[GOTCH] = core->mac[TOTH]; + e1000x_inc_reg_if_not_full(core->mac, GPTC); + e1000x_grow_8reg_if_not_full(core->mac, GOTCL, tot_len); } static void diff --git a/hw/net/e1000x_common.c b/hw/net/e1000x_common.c index a8d93870b5..3fdc34f753 100644 --- a/hw/net/e1000x_common.c +++ b/hw/net/e1000x_common.c @@ -217,15 +217,14 @@ e1000x_update_rx_total_stats(uint32_t *mac, e1000x_increase_size_stats(mac, PRCregs, data_fcs_size); e1000x_inc_reg_if_not_full(mac, TPR); - mac[GPRC] = mac[TPR]; + e1000x_inc_reg_if_not_full(mac, GPRC); /* TOR - Total Octets Received: * This register includes bytes received in a packet from the field through the field, inclusively. * Always include FCS length (4) in size. */ e1000x_grow_8reg_if_not_full(mac, TORL, data_size + 4); - mac[GORCL] = mac[TORL]; - mac[GORCH] = mac[TORH]; + e1000x_grow_8reg_if_not_full(mac, GORCL, data_size + 4); } void From 859759ee3995a3130855732860536588c0f33668 Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Thu, 13 Apr 2023 13:19:46 -0400 Subject: [PATCH 118/174] rtl8139: fix large_send_mss divide-by-zero MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If the driver sets large_send_mss to 0 then a divide-by-zero occurs. Even if the division wasn't a problem, the for loop that emits MSS-sized packets would never terminate. Solve these issues by skipping offloading when large_send_mss=0. This issue was found by OSS-Fuzz as part of Alexander Bulekov's device fuzzing work. The reproducer is: $ cat << EOF | ./qemu-system-i386 -display none -machine accel=qtest, -m \ 512M,slots=1,maxmem=0xffff000000000000 -machine q35 -nodefaults -device \ rtl8139,netdev=net0 -netdev user,id=net0 -device \ pc-dimm,id=nv1,memdev=mem1,addr=0xb800a64602800000 -object \ memory-backend-ram,id=mem1,size=2M -qtest stdio outl 0xcf8 0x80000814 outl 0xcfc 0xe0000000 outl 0xcf8 0x80000804 outw 0xcfc 0x06 write 0xe0000037 0x1 0x04 write 0xe00000e0 0x2 0x01 write 0x1 0x1 0x04 write 0x3 0x1 0x98 write 0xa 0x1 0x8c write 0xb 0x1 0x02 write 0xc 0x1 0x46 write 0xd 0x1 0xa6 write 0xf 0x1 0xb8 write 0xb800a646028c000c 0x1 0x08 write 0xb800a646028c000e 0x1 0x47 write 0xb800a646028c0010 0x1 0x02 write 0xb800a646028c0017 0x1 0x06 write 0xb800a646028c0036 0x1 0x80 write 0xe00000d9 0x1 0x40 EOF Buglink: https://gitlab.com/qemu-project/qemu/-/issues/1582 Closes: https://gitlab.com/qemu-project/qemu/-/issues/1582 Cc: qemu-stable@nongnu.org Cc: Peter Maydell Fixes: 6d71357a3b65 ("rtl8139: honor large send MSS value") Reported-by: Alexander Bulekov Reviewed-by: Philippe Mathieu-Daudé Tested-by: Alexander Bulekov Signed-off-by: Stefan Hajnoczi Signed-off-by: Jason Wang (cherry picked from commit 792676c165159c11412346870fd58fd243ab2166) Signed-off-by: Michael Tokarev --- hw/net/rtl8139.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hw/net/rtl8139.c b/hw/net/rtl8139.c index 700b1b66b6..eb679d7c40 100644 --- a/hw/net/rtl8139.c +++ b/hw/net/rtl8139.c @@ -2154,6 +2154,9 @@ static int rtl8139_cplus_transmit_one(RTL8139State *s) int large_send_mss = (txdw0 >> CP_TC_LGSEN_MSS_SHIFT) & CP_TC_LGSEN_MSS_MASK; + if (large_send_mss == 0) { + goto skip_offload; + } DPRINTF("+++ C+ mode offloaded task TSO IP data %d " "frame data %d specified MSS=%d\n", From 12f0e6175808505f9c458a6c03967a49e6980159 Mon Sep 17 00:00:00 2001 From: Akihiko Odaki Date: Tue, 23 May 2023 11:39:12 +0900 Subject: [PATCH 119/174] util/vfio-helpers: Use g_file_read_link() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When _FORTIFY_SOURCE=2, glibc version is 2.35, and GCC version is 12.1.0, the compiler complains as follows: In file included from /usr/include/features.h:490, from /usr/include/bits/libc-header-start.h:33, from /usr/include/stdint.h:26, from /usr/lib/gcc/aarch64-unknown-linux-gnu/12.1.0/include/stdint.h:9, from /home/alarm/q/var/qemu/include/qemu/osdep.h:94, from ../util/vfio-helpers.c:13: In function 'readlink', inlined from 'sysfs_find_group_file' at ../util/vfio-helpers.c:116:9, inlined from 'qemu_vfio_init_pci' at ../util/vfio-helpers.c:326:18, inlined from 'qemu_vfio_open_pci' at ../util/vfio-helpers.c:517:9: /usr/include/bits/unistd.h:119:10: error: argument 2 is null but the corresponding size argument 3 value is 4095 [-Werror=nonnull] 119 | return __glibc_fortify (readlink, __len, sizeof (char), | ^~~~~~~~~~~~~~~ This error implies the allocated buffer can be NULL. Use g_file_read_link(), which allocates buffer automatically to avoid the error. Signed-off-by: Akihiko Odaki Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Cédric Le Goater Signed-off-by: Cédric Le Goater (cherry picked from commit dbdea0dbfe2cef9ef6c752e9077e4fc98724194c) Signed-off-by: Michael Tokarev --- util/vfio-helpers.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/util/vfio-helpers.c b/util/vfio-helpers.c index 0d1520caac..4670867e1f 100644 --- a/util/vfio-helpers.c +++ b/util/vfio-helpers.c @@ -106,15 +106,17 @@ struct QEMUVFIOState { */ static char *sysfs_find_group_file(const char *device, Error **errp) { + g_autoptr(GError) gerr = NULL; char *sysfs_link; char *sysfs_group; char *p; char *path = NULL; sysfs_link = g_strdup_printf("/sys/bus/pci/devices/%s/iommu_group", device); - sysfs_group = g_malloc0(PATH_MAX); - if (readlink(sysfs_link, sysfs_group, PATH_MAX - 1) == -1) { - error_setg_errno(errp, errno, "Failed to find iommu group sysfs path"); + sysfs_group = g_file_read_link(sysfs_link, &gerr); + if (gerr) { + error_setg(errp, "Failed to find iommu group sysfs path: %s", + gerr->message); goto out; } p = strrchr(sysfs_group, '/'); From 49d5fc4cfc420145aa203d14345bd1da48df1c9b Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Tue, 23 May 2023 17:58:40 +0200 Subject: [PATCH 120/174] usb/ohci: Set pad to 0 after frame update When the OHCI controller's framenumber is incremented, HccaPad1 register should be set to zero (Ref OHCI Spec 4.4) ReactOS uses hccaPad1 to determine if the OHCI hardware is running, consequently it fails this check in current qemu master. Signed-off-by: Ryan Wendland Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1048 Signed-off-by: Paolo Bonzini (cherry picked from commit 6301460ce9f59885e8feb65185bcfb6b128c8eff) Signed-off-by: Michael Tokarev --- hw/usb/hcd-ohci.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hw/usb/hcd-ohci.c b/hw/usb/hcd-ohci.c index 9d68036d23..c3ab762f54 100644 --- a/hw/usb/hcd-ohci.c +++ b/hw/usb/hcd-ohci.c @@ -1210,6 +1210,8 @@ static void ohci_frame_boundary(void *opaque) /* Increment frame number and take care of endianness. */ ohci->frame_number = (ohci->frame_number + 1) & 0xffff; hcca.frame = cpu_to_le16(ohci->frame_number); + /* When the HC updates frame number, set pad to 0. Ref OHCI Spec 4.4.1*/ + hcca.pad = 0; if (ohci->done_count == 0 && !(ohci->intr_status & OHCI_INTR_WD)) { if (!ohci->done) From 9fe6e8139dc268f9916b8b7ce3ed9586c5354d11 Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Mon, 22 May 2023 11:10:11 +0200 Subject: [PATCH 121/174] hw/scsi/lsi53c895a: Fix reentrancy issues in the LSI controller (CVE-2023-0330) We cannot use the generic reentrancy guard in the LSI code, so we have to manually prevent endless reentrancy here. The problematic lsi_execute_script() function has already a way to detect whether too many instructions have been executed - we just have to slightly change the logic here that it also takes into account if the function has been called too often in a reentrant way. The code in fuzz-lsi53c895a-test.c has been taken from an earlier patch by Mauro Matteo Cascella. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1563 Message-Id: <20230522091011.1082574-1-thuth@redhat.com> Reviewed-by: Stefan Hajnoczi Reviewed-by: Alexander Bulekov Signed-off-by: Thomas Huth (cherry picked from commit b987718bbb1d0eabf95499b976212dd5f0120d75) Signed-off-by: Michael Tokarev --- hw/scsi/lsi53c895a.c | 23 +++++++++++++++------ tests/qtest/fuzz-lsi53c895a-test.c | 33 ++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 6 deletions(-) diff --git a/hw/scsi/lsi53c895a.c b/hw/scsi/lsi53c895a.c index 50979640c3..42532c4744 100644 --- a/hw/scsi/lsi53c895a.c +++ b/hw/scsi/lsi53c895a.c @@ -1134,15 +1134,24 @@ static void lsi_execute_script(LSIState *s) uint32_t addr, addr_high; int opcode; int insn_processed = 0; + static int reentrancy_level; + + reentrancy_level++; s->istat1 |= LSI_ISTAT1_SRUN; again: - if (++insn_processed > LSI_MAX_INSN) { - /* Some windows drivers make the device spin waiting for a memory - location to change. If we have been executed a lot of code then - assume this is the case and force an unexpected device disconnect. - This is apparently sufficient to beat the drivers into submission. - */ + /* + * Some windows drivers make the device spin waiting for a memory location + * to change. If we have executed more than LSI_MAX_INSN instructions then + * assume this is the case and force an unexpected device disconnect. This + * is apparently sufficient to beat the drivers into submission. + * + * Another issue (CVE-2023-0330) can occur if the script is programmed to + * trigger itself again and again. Avoid this problem by stopping after + * being called multiple times in a reentrant way (8 is an arbitrary value + * which should be enough for all valid use cases). + */ + if (++insn_processed > LSI_MAX_INSN || reentrancy_level > 8) { if (!(s->sien0 & LSI_SIST0_UDC)) { qemu_log_mask(LOG_GUEST_ERROR, "lsi_scsi: inf. loop with UDC masked"); @@ -1596,6 +1605,8 @@ again: } } trace_lsi_execute_script_stop(); + + reentrancy_level--; } static uint8_t lsi_reg_readb(LSIState *s, int offset) diff --git a/tests/qtest/fuzz-lsi53c895a-test.c b/tests/qtest/fuzz-lsi53c895a-test.c index 392a7ae7ed..9b007def26 100644 --- a/tests/qtest/fuzz-lsi53c895a-test.c +++ b/tests/qtest/fuzz-lsi53c895a-test.c @@ -8,6 +8,36 @@ #include "qemu/osdep.h" #include "libqtest.h" +/* + * This used to trigger a DMA reentrancy issue + * leading to memory corruption bugs like stack + * overflow or use-after-free + * https://gitlab.com/qemu-project/qemu/-/issues/1563 + */ +static void test_lsi_dma_reentrancy(void) +{ + QTestState *s; + + s = qtest_init("-M q35 -m 512M -nodefaults " + "-blockdev driver=null-co,node-name=null0 " + "-device lsi53c810 -device scsi-cd,drive=null0"); + + qtest_outl(s, 0xcf8, 0x80000804); /* PCI Command Register */ + qtest_outw(s, 0xcfc, 0x7); /* Enables accesses */ + qtest_outl(s, 0xcf8, 0x80000814); /* Memory Bar 1 */ + qtest_outl(s, 0xcfc, 0xff100000); /* Set MMIO Address*/ + qtest_outl(s, 0xcf8, 0x80000818); /* Memory Bar 2 */ + qtest_outl(s, 0xcfc, 0xff000000); /* Set RAM Address*/ + qtest_writel(s, 0xff000000, 0xc0000024); + qtest_writel(s, 0xff000114, 0x00000080); + qtest_writel(s, 0xff00012c, 0xff000000); + qtest_writel(s, 0xff000004, 0xff000114); + qtest_writel(s, 0xff000008, 0xff100014); + qtest_writel(s, 0xff10002f, 0x000000ff); + + qtest_quit(s); +} + /* * This used to trigger a UAF in lsi_do_msgout() * https://gitlab.com/qemu-project/qemu/-/issues/972 @@ -120,5 +150,8 @@ int main(int argc, char **argv) qtest_add_func("fuzz/lsi53c895a/lsi_do_msgout_cancel_req", test_lsi_do_msgout_cancel_req); + qtest_add_func("fuzz/lsi53c895a/lsi_dma_reentrancy", + test_lsi_dma_reentrancy); + return g_test_run(); } From 9d52aaa92bd8b301e918dc5055041932ee1e0371 Mon Sep 17 00:00:00 2001 From: Igor Mammedov Date: Mon, 22 May 2023 15:17:17 +0200 Subject: [PATCH 122/174] machine: do not crash if default RAM backend name has been stolen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit QEMU aborts when default RAM backend should be used (i.e. no explicit '-machine memory-backend=' specified) but user has created an object which 'id' equals to default RAM backend name used by board. $QEMU -machine pc \ -object memory-backend-ram,id=pc.ram,size=4294967296 Actual results: QEMU 7.2.0 monitor - type 'help' for more information (qemu) Unexpected error in object_property_try_add() at ../qom/object.c:1239: qemu-kvm: attempt to add duplicate property 'pc.ram' to object (type 'container') Aborted (core dumped) Instead of abort, check for the conflicting 'id' and exit with an error, suggesting how to remedy the issue. Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=2207886 Signed-off-by: Igor Mammedov Message-Id: <20230522131717.3780533-1-imammedo@redhat.com> Tested-by: Thomas Huth Reviewed-by: Thomas Huth Reviewed-by: Shaoqin Huang Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: Thomas Huth (cherry picked from commit a37531f2381c4e294e48b1417089474128388b44) Signed-off-by: Michael Tokarev --- hw/core/machine.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/hw/core/machine.c b/hw/core/machine.c index 035d078a74..19f42450f5 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -1329,6 +1329,14 @@ void machine_run_board_init(MachineState *machine, const char *mem_path, Error * } } else if (machine_class->default_ram_id && machine->ram_size && numa_uses_legacy_mem()) { + if (object_property_find(object_get_objects_root(), + machine_class->default_ram_id)) { + error_setg(errp, "object name '%s' is reserved for the default" + " RAM backend, it can't be used for any other purposes." + " Change the object's 'id' to something else", + machine_class->default_ram_id); + return; + } if (!create_default_memdev(current_machine, mem_path, errp)) { return; } From a8f7a3504dd30f760e3f07577a7e3f0554d538ea Mon Sep 17 00:00:00 2001 From: Michael Tokarev Date: Mon, 29 May 2023 18:17:39 +0300 Subject: [PATCH 123/174] Update version for 7.2.3 release Signed-off-by: Michael Tokarev --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 77f5bec5b2..429dc57af3 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -7.2.2 +7.2.3 From 509c444bacd0f3588891f6cd5c9a0b626f026a76 Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Mon, 24 Apr 2023 10:22:35 +0100 Subject: [PATCH 124/174] gitlab-ci: Avoid to re-run "configure" in the device-crash-test jobs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After "make check-venv" had been added to these jobs, they started to re-run "configure" each time since our logic in the makefile thinks that some files are out of date here. Avoid it with the same trick that we are using in buildtest-template.yml already by disabling the up-to-date check via NINJA=":". Fixes: 1d8cf47e5b ("tests: run 'device-crash-test' from tests/venv") Signed-off-by: Thomas Huth Message-Id: <20230414145845.456145-2-thuth@redhat.com> Signed-off-by: Alex Bennée Message-Id: <20230424092249.58552-5-alex.bennee@linaro.org> (cherry picked from commit 4d3bd91b26a69b39a178744d3d6e5f23050afb23) Signed-off-by: Michael Tokarev --- .gitlab-ci.d/buildtest.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.d/buildtest.yml b/.gitlab-ci.d/buildtest.yml index d21b4a1fd4..38d95c8487 100644 --- a/.gitlab-ci.d/buildtest.yml +++ b/.gitlab-ci.d/buildtest.yml @@ -109,7 +109,7 @@ crash-test-debian: IMAGE: debian-amd64 script: - cd build - - make check-venv + - make NINJA=":" check-venv - tests/venv/bin/python3 scripts/device-crash-test -q ./qemu-system-i386 build-system-fedora: @@ -155,7 +155,7 @@ crash-test-fedora: IMAGE: fedora script: - cd build - - make check-venv + - make NINJA=":" check-venv - tests/venv/bin/python3 scripts/device-crash-test -q ./qemu-system-ppc - tests/venv/bin/python3 scripts/device-crash-test -q ./qemu-system-riscv32 From 369e2c4e2d0771c3df598646340bbfbb1a0cb7db Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Mon, 24 Apr 2023 10:22:36 +0100 Subject: [PATCH 125/174] scripts/device-crash-test: Add a parameter to run with TCG only MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We're currently facing the problem that the device-crash-test script runs twice as long in the CI when a runner supports KVM - which sometimes results in a timeout of the CI job. To get a more deterministic runtime here, add an option to the script that allows to run it with TCG only. Reported-by: Eldon Stegall Signed-off-by: Thomas Huth Reviewed-by: Philippe Mathieu-Daudé Message-Id: <20230414145845.456145-3-thuth@redhat.com> Signed-off-by: Alex Bennée Message-Id: <20230424092249.58552-6-alex.bennee@linaro.org> (cherry picked from commit 8b869aa59109d238fd684e1ade204b6942202120) Signed-off-by: Michael Tokarev --- .gitlab-ci.d/buildtest.yml | 2 +- scripts/device-crash-test | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.d/buildtest.yml b/.gitlab-ci.d/buildtest.yml index 38d95c8487..10886bb414 100644 --- a/.gitlab-ci.d/buildtest.yml +++ b/.gitlab-ci.d/buildtest.yml @@ -110,7 +110,7 @@ crash-test-debian: script: - cd build - make NINJA=":" check-venv - - tests/venv/bin/python3 scripts/device-crash-test -q ./qemu-system-i386 + - tests/venv/bin/python3 scripts/device-crash-test -q --tcg-only ./qemu-system-i386 build-system-fedora: extends: .native_build_job_template diff --git a/scripts/device-crash-test b/scripts/device-crash-test index 73bcb98693..b74d887331 100755 --- a/scripts/device-crash-test +++ b/scripts/device-crash-test @@ -397,7 +397,7 @@ def binariesToTest(args, testcase): def accelsToTest(args, testcase): - if getBinaryInfo(args, testcase['binary']).kvm_available: + if getBinaryInfo(args, testcase['binary']).kvm_available and not args.tcg_only: yield 'kvm' yield 'tcg' @@ -510,6 +510,8 @@ def main(): help="Full mode: test cases that are expected to fail") parser.add_argument('--strict', action='store_true', dest='strict', help="Treat all warnings as fatal") + parser.add_argument('--tcg-only', action='store_true', dest='tcg_only', + help="Only test with TCG accelerator") parser.add_argument('qemu', nargs='*', metavar='QEMU', help='QEMU binary to run') args = parser.parse_args() From 834fc12721b90c8542304a8be6463974562f8916 Mon Sep 17 00:00:00 2001 From: Bernhard Beschow Date: Sat, 4 Mar 2023 12:40:41 +0100 Subject: [PATCH 126/174] hw/ppc/prep: Fix wiring of PIC -> CPU interrupt Commit cef2e7148e32 ("hw/isa/i82378: Remove intermediate IRQ forwarder") passes s->cpu_intr to i8259_init() in i82378_realize() directly. However, s- >cpu_intr isn't initialized yet since that happens after the south bridge's pci_realize_and_unref() in board code. Fix this by initializing s->cpu_intr before realizing the south bridge. Fixes: cef2e7148e32 ("hw/isa/i82378: Remove intermediate IRQ forwarder") Signed-off-by: Bernhard Beschow Reviewed-by: Daniel Henrique Barboza Message-Id: <20230304114043.121024-4-shentey@gmail.com> Signed-off-by: Daniel Henrique Barboza (cherry picked from commit 2237af5e60ada06d90bf714e85523deafd936b9b) Signed-off-by: Michael Tokarev --- hw/ppc/prep.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hw/ppc/prep.c b/hw/ppc/prep.c index fcbe4c5837..ec8d9584fb 100644 --- a/hw/ppc/prep.c +++ b/hw/ppc/prep.c @@ -271,9 +271,11 @@ static void ibm_40p_init(MachineState *machine) } /* PCI -> ISA bridge */ - i82378_dev = DEVICE(pci_create_simple(pci_bus, PCI_DEVFN(11, 0), "i82378")); + i82378_dev = DEVICE(pci_new(PCI_DEVFN(11, 0), "i82378")); qdev_connect_gpio_out(i82378_dev, 0, qdev_get_gpio_in(DEVICE(cpu), PPC6xx_INPUT_INT)); + qdev_realize_and_unref(i82378_dev, BUS(pci_bus), &error_fatal); + sysbus_connect_irq(pcihost, 0, qdev_get_gpio_in(i82378_dev, 15)); isa_bus = ISA_BUS(qdev_get_child_bus(i82378_dev, "isa.0")); From b201fb8c5aca78400d4f364632fb1e19827da942 Mon Sep 17 00:00:00 2001 From: Erico Nunes Date: Mon, 20 Feb 2023 18:56:05 +0100 Subject: [PATCH 127/174] ui/gtk: fix passing y0_top parameter to scanout MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The dmabuf->y0_top flag is passed to .dpy_gl_scanout_dmabuf(), however in the gtk ui both implementations dropped it when doing the next scanout_texture call. Fixes flipped linux console using vhost-user-gpu with the gtk ui display. Signed-off-by: Erico Nunes Reviewed-by: Marc-André Lureau Message-Id: <20230220175605.43759-1-ernunes@redhat.com> (cherry picked from commit 94400fa53f81c9f58ad88cf3f3e7ea89ec423d39) Signed-off-by: Michael Tokarev --- ui/gtk-egl.c | 2 +- ui/gtk-gl-area.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ui/gtk-egl.c b/ui/gtk-egl.c index e84431790c..557668e418 100644 --- a/ui/gtk-egl.c +++ b/ui/gtk-egl.c @@ -256,7 +256,7 @@ void gd_egl_scanout_dmabuf(DisplayChangeListener *dcl, } gd_egl_scanout_texture(dcl, dmabuf->texture, - false, dmabuf->width, dmabuf->height, + dmabuf->y0_top, dmabuf->width, dmabuf->height, 0, 0, dmabuf->width, dmabuf->height); if (dmabuf->allow_fences) { diff --git a/ui/gtk-gl-area.c b/ui/gtk-gl-area.c index 7696df1f6b..c384a1516b 100644 --- a/ui/gtk-gl-area.c +++ b/ui/gtk-gl-area.c @@ -298,7 +298,7 @@ void gd_gl_area_scanout_dmabuf(DisplayChangeListener *dcl, } gd_gl_area_scanout_texture(dcl, dmabuf->texture, - false, dmabuf->width, dmabuf->height, + dmabuf->y0_top, dmabuf->width, dmabuf->height, 0, 0, dmabuf->width, dmabuf->height); if (dmabuf->allow_fences) { From 95c9059e66526bc0f728c45516cb0366ecaeefc7 Mon Sep 17 00:00:00 2001 From: Erico Nunes Date: Mon, 20 Mar 2023 17:08:55 +0100 Subject: [PATCH 128/174] ui/gtk: use widget size for cursor motion event MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The gd_motion_event size has some calculations for the cursor position, which also take into account things like different size of the framebuffer compared to the window size. The use of window size makes things more difficult though, as at least in the case of Wayland includes the size of ui elements like a menu bar at the top of the window. This leads to a wrong position calculation by a few pixels. Fix it by using the size of the widget, which already returns the size of the actual space to render the framebuffer. Signed-off-by: Erico Nunes Reviewed-by: Marc-André Lureau Acked-by: Vivek Kasireddy Message-Id: <20230320160856.364319-1-ernunes@redhat.com> (cherry picked from commit 2f31663ed4b5631b5e1c79f5cdd6463e55410eb8) Signed-off-by: Michael Tokarev --- ui/gtk.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/ui/gtk.c b/ui/gtk.c index dfaf6d33c3..e681e8c319 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -868,7 +868,6 @@ static gboolean gd_motion_event(GtkWidget *widget, GdkEventMotion *motion, { VirtualConsole *vc = opaque; GtkDisplayState *s = vc->s; - GdkWindow *window; int x, y; int mx, my; int fbh, fbw; @@ -881,10 +880,9 @@ static gboolean gd_motion_event(GtkWidget *widget, GdkEventMotion *motion, fbw = surface_width(vc->gfx.ds) * vc->gfx.scale_x; fbh = surface_height(vc->gfx.ds) * vc->gfx.scale_y; - window = gtk_widget_get_window(vc->gfx.drawing_area); - ww = gdk_window_get_width(window); - wh = gdk_window_get_height(window); - ws = gdk_window_get_scale_factor(window); + ww = gtk_widget_get_allocated_width(widget); + wh = gtk_widget_get_allocated_height(widget); + ws = gtk_widget_get_scale_factor(widget); mx = my = 0; if (ww > fbw) { From b15e44adebc21d968c7f7f57b55636ee04150ad5 Mon Sep 17 00:00:00 2001 From: Erico Nunes Date: Mon, 20 Mar 2023 17:08:56 +0100 Subject: [PATCH 129/174] ui/gtk-egl: fix scaling for cursor position in scanout mode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit vc->gfx.w and vc->gfx.h are not updated appropriately in this code path, which leads to a different scaling factor for rendering the cursor on some edge cases (e.g. the focus has left and re-entered the gtk window). This can be reproduced using vhost-user-gpu with the gtk ui on the x11 backend. Use the surface dimensions which are already updated accordingly. Signed-off-by: Erico Nunes Acked-by: Marc-André Lureau Message-Id: <20230320160856.364319-2-ernunes@redhat.com> (cherry picked from commit f8a951bb951140a585341c700ebeec58d83f7bbc) Signed-off-by: Michael Tokarev --- ui/gtk-egl.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui/gtk-egl.c b/ui/gtk-egl.c index 557668e418..19130041bc 100644 --- a/ui/gtk-egl.c +++ b/ui/gtk-egl.c @@ -88,8 +88,8 @@ void gd_egl_draw(VirtualConsole *vc) #endif gd_egl_scanout_flush(&vc->gfx.dcl, 0, 0, vc->gfx.w, vc->gfx.h); - vc->gfx.scale_x = (double)ww / vc->gfx.w; - vc->gfx.scale_y = (double)wh / vc->gfx.h; + vc->gfx.scale_x = (double)ww / surface_width(vc->gfx.ds); + vc->gfx.scale_y = (double)wh / surface_height(vc->gfx.ds); glFlush(); #ifdef CONFIG_GBM From d4d91ae902199d991572c4cf3f4ede28e82cc0fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Date: Thu, 11 May 2023 11:42:17 +0400 Subject: [PATCH 130/174] ui/sdl2: fix surface_gl_update_texture: Assertion 'gls' failed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Before sdl2_gl_update() is called, sdl2_gl_switch() may decide to destroy the console window and its associated shaders. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1644 Fixes: c84ab0a500a8 ("ui/console: optionally update after gfx switch") Signed-off-by: Marc-André Lureau Tested-by: Bin Meng Message-Id: <20230511074217.4171842-1-marcandre.lureau@redhat.com> (cherry picked from commit b3a654d82ecf276b59a67b2fd688e11a0d8a0064) Signed-off-by: Michael Tokarev --- ui/sdl2-gl.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ui/sdl2-gl.c b/ui/sdl2-gl.c index 39cab8cde7..bbfa70eac3 100644 --- a/ui/sdl2-gl.c +++ b/ui/sdl2-gl.c @@ -67,6 +67,10 @@ void sdl2_gl_update(DisplayChangeListener *dcl, assert(scon->opengl); + if (!scon->real_window) { + return; + } + SDL_GL_MakeCurrent(scon->real_window, scon->winctx); surface_gl_update_texture(scon->gls, scon->surface, x, y, w, h); scon->updates++; From 6520bf66f4998b027c9d8f9dfb1ee34a958ade42 Mon Sep 17 00:00:00 2001 From: Bernhard Beschow Date: Mon, 17 Apr 2023 21:21:38 +0200 Subject: [PATCH 131/174] ui/sdl2: Grab Alt+Tab also in fullscreen mode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit By default, SDL grabs Alt+Tab only in non-fullscreen mode. This causes Alt+Tab to switch tasks on the host rather than in the VM in fullscreen mode while it switches tasks in non-fullscreen mode in the VM. Fix this confusing behavior by grabbing Alt+Tab in fullscreen mode, always causing tasks to be switched in the VM. Signed-off-by: Bernhard Beschow Reviewed-by: Volker Rümelin Message-Id: <20230417192139.43263-2-shentey@gmail.com> (cherry picked from commit efc00a37090eced53bff8b42d26991252aaacc44) Signed-off-by: Michael Tokarev --- ui/sdl2.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ui/sdl2.c b/ui/sdl2.c index 8cb77416af..34b3f45c49 100644 --- a/ui/sdl2.c +++ b/ui/sdl2.c @@ -850,6 +850,9 @@ static void sdl2_display_init(DisplayState *ds, DisplayOptions *o) SDL_SetHint(SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR, "0"); #endif SDL_SetHint(SDL_HINT_GRAB_KEYBOARD, "1"); +#ifdef SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED + SDL_SetHint(SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED, "0"); +#endif memset(&info, 0, sizeof(info)); SDL_VERSION(&info.version); From 70237e21590005e11b1e4508491eb42f7dee5aa8 Mon Sep 17 00:00:00 2001 From: Bernhard Beschow Date: Mon, 17 Apr 2023 21:21:39 +0200 Subject: [PATCH 132/174] ui/sdl2: Grab Alt+F4 also under Windows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SDL doesn't grab Alt+F4 under Windows by default. Pressing Alt+F4 thus closes the VM immediately without confirmation, possibly leading to data loss. Fix this by always grabbing Alt+F4 on Windows hosts, too. Signed-off-by: Bernhard Beschow Reviewed-by: Volker Rümelin Message-Id: <20230417192139.43263-3-shentey@gmail.com> (cherry picked from commit 083db9db44c89d7ea7f81844302194d708bcff2b) Signed-off-by: Michael Tokarev --- ui/sdl2.c | 1 + 1 file changed, 1 insertion(+) diff --git a/ui/sdl2.c b/ui/sdl2.c index 34b3f45c49..b483a51fb7 100644 --- a/ui/sdl2.c +++ b/ui/sdl2.c @@ -853,6 +853,7 @@ static void sdl2_display_init(DisplayState *ds, DisplayOptions *o) #ifdef SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED SDL_SetHint(SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED, "0"); #endif + SDL_SetHint(SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4, "1"); memset(&info, 0, sizeof(info)); SDL_VERSION(&info.version); From 22048b1bff428ceb131754b85da0603c29b3b130 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Volker=20R=C3=BCmelin?= Date: Tue, 18 Apr 2023 08:28:23 +0200 Subject: [PATCH 133/174] ui/sdl2: disable SDL_HINT_GRAB_KEYBOARD on Windows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Windows sends an extra left control key up/down input event for every right alt key up/down input event for keyboards with international layout. Since commit 830473455f ("ui/sdl2: fix handling of AltGr key on Windows") QEMU uses a Windows low level keyboard hook procedure to reliably filter out the special left control key and to grab the keyboard on Windows. The SDL2 version 2.0.16 introduced its own Windows low level keyboard hook procedure to grab the keyboard. Windows calls this callback before the QEMU keyboard hook procedure. This disables the special left control key filter when the keyboard is grabbed. To fix the problem, disable the SDL2 Windows low level keyboard hook procedure. Reported-by: Bernhard Beschow Signed-off-by: Volker Rümelin Reviewed-by: Thomas Huth Tested-by: Bernhard Beschow Message-Id: <20230418062823.5683-1-vr_qemu@t-online.de> (cherry picked from commit 1dfea3f212e43bfd59d1e1f40b9776db440b211f) Signed-off-by: Michael Tokarev --- ui/sdl2.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ui/sdl2.c b/ui/sdl2.c index b483a51fb7..d630459b78 100644 --- a/ui/sdl2.c +++ b/ui/sdl2.c @@ -849,7 +849,10 @@ static void sdl2_display_init(DisplayState *ds, DisplayOptions *o) #ifdef SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR /* only available since SDL 2.0.8 */ SDL_SetHint(SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR, "0"); #endif +#ifndef CONFIG_WIN32 + /* QEMU uses its own low level keyboard hook procecure on Windows */ SDL_SetHint(SDL_HINT_GRAB_KEYBOARD, "1"); +#endif #ifdef SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED SDL_SetHint(SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED, "0"); #endif From fee86f6c5ba0096b89463270c0231b6dcc03611a Mon Sep 17 00:00:00 2001 From: Tommy Wu Date: Thu, 25 May 2023 10:37:51 +0100 Subject: [PATCH 134/174] hw/dma/xilinx_axidma: Check DMASR.HALTED to prevent infinite loop. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When we receive a packet from the xilinx_axienet and then try to s2mem through the xilinx_axidma, if the descriptor ring buffer is full in the xilinx axidma driver, we’ll assert the DMASR.HALTED in the function : stream_process_s2mem and return 0. In the end, we’ll be stuck in an infinite loop in axienet_eth_rx_notify. This patch checks the DMASR.HALTED state when we try to push data from xilinx axi-enet to xilinx axi-dma. When the DMASR.HALTED is asserted, we will not keep pushing the data and then prevent the infinte loop. Signed-off-by: Tommy Wu Reviewed-by: Edgar E. Iglesias Reviewed-by: Frank Chang Message-id: 20230519062137.1251741-1-tommy.wu@sifive.com Signed-off-by: Peter Maydell (cherry picked from commit 31afe04586efeccb80cc36ffafcd0e32a3245ffb) Signed-off-by: Michael Tokarev --- hw/dma/xilinx_axidma.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/hw/dma/xilinx_axidma.c b/hw/dma/xilinx_axidma.c index cbb8f0f169..99e50f65e2 100644 --- a/hw/dma/xilinx_axidma.c +++ b/hw/dma/xilinx_axidma.c @@ -168,6 +168,11 @@ static inline int stream_idle(struct Stream *s) return !!(s->regs[R_DMASR] & DMASR_IDLE); } +static inline int stream_halted(struct Stream *s) +{ + return !!(s->regs[R_DMASR] & DMASR_HALTED); +} + static void stream_reset(struct Stream *s) { s->regs[R_DMASR] = DMASR_HALTED; /* starts up halted. */ @@ -269,7 +274,7 @@ static void stream_process_mem2s(struct Stream *s, StreamSink *tx_data_dev, uint64_t addr; bool eop; - if (!stream_running(s) || stream_idle(s)) { + if (!stream_running(s) || stream_idle(s) || stream_halted(s)) { return; } @@ -326,7 +331,7 @@ static size_t stream_process_s2mem(struct Stream *s, unsigned char *buf, unsigned int rxlen; size_t pos = 0; - if (!stream_running(s) || stream_idle(s)) { + if (!stream_running(s) || stream_idle(s) || stream_halted(s)) { return 0; } @@ -407,7 +412,7 @@ xilinx_axidma_data_stream_can_push(StreamSink *obj, XilinxAXIDMAStreamSink *ds = XILINX_AXI_DMA_DATA_STREAM(obj); struct Stream *s = &ds->dma->streams[1]; - if (!stream_running(s) || stream_idle(s)) { + if (!stream_running(s) || stream_idle(s) || stream_halted(s)) { ds->dma->notify = notify; ds->dma->notify_opaque = notify_opaque; return false; From f82dcd73e85b586bcfe31d99d4bdc8d33727f2ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Chigot?= Date: Wed, 24 May 2023 16:37:14 +0200 Subject: [PATCH 135/174] hw/arm/xlnx-zynqmp: fix unsigned error when checking the RPUs number MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When passing --smp with a number lower than XLNX_ZYNQMP_NUM_APU_CPUS, the expression (ms->smp.cpus - XLNX_ZYNQMP_NUM_APU_CPUS) will result in a positive number as ms->smp.cpus is a unsigned int. This will raise the following error afterwards, as Qemu will try to instantiate some additional RPUs. | $ qemu-system-aarch64 --smp 1 -M xlnx-zcu102 | ** | ERROR:../src/tcg/tcg.c:777:tcg_register_thread: | assertion failed: (n < tcg_max_ctxs) Signed-off-by: Clément Chigot Reviewed-by: Francisco Iglesias Tested-by: Francisco Iglesias Message-id: 20230524143714.565792-1-chigot@adacore.com Signed-off-by: Peter Maydell (cherry picked from commit c9ba1c9f02cfede5329f504cdda6fd3a256e0434) Signed-off-by: Michael Tokarev --- hw/arm/xlnx-zynqmp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/arm/xlnx-zynqmp.c b/hw/arm/xlnx-zynqmp.c index 335cfc417d..5905a33015 100644 --- a/hw/arm/xlnx-zynqmp.c +++ b/hw/arm/xlnx-zynqmp.c @@ -213,7 +213,7 @@ static void xlnx_zynqmp_create_rpu(MachineState *ms, XlnxZynqMPState *s, const char *boot_cpu, Error **errp) { int i; - int num_rpus = MIN(ms->smp.cpus - XLNX_ZYNQMP_NUM_APU_CPUS, + int num_rpus = MIN((int)(ms->smp.cpus - XLNX_ZYNQMP_NUM_APU_CPUS), XLNX_ZYNQMP_NUM_RPU_CPUS); if (num_rpus <= 0) { From 7cba3a05b57e7e62b03e57c88a8416fd84635d16 Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Tue, 23 May 2023 14:17:26 +0100 Subject: [PATCH 136/174] target/arm: Explicitly select short-format FSR for M-profile For M-profile, there is no guest-facing A-profile format FSR, but we still use the env->exception.fsr field to pass fault information from the point where a fault is raised to the code in arm_v7m_cpu_do_interrupt() which interprets it and sets the M-profile specific fault status registers. So it doesn't matter whether we fill in env->exception.fsr in the short format or the LPAE format, as long as both sides agree. As it happens arm_v7m_cpu_do_interrupt() assumes short-form. In compute_fsr_fsc() we weren't explicitly choosing short-form for M-profile, but instead relied on it falling out in the wash because arm_s1_regime_using_lpae_format() would be false. This was broken in commit 452c67a4 when we added v8R support, because we said "PMSAv8 is always LPAE format" (as it is for v8R), forgetting that we were implicitly using this code path on M-profile. At that point we would hit a g_assert_not_reached(): ERROR:../../target/arm/internals.h:549:arm_fi_to_lfsc: code should not be reached #7 0x0000555555e055f7 in arm_fi_to_lfsc (fi=0x7fffecff9a90) at ../../target/arm/internals.h:549 #8 0x0000555555e05a27 in compute_fsr_fsc (env=0x555557356670, fi=0x7fffecff9a90, target_el=1, mmu_idx=1, ret_fsc=0x7fffecff9a1c) at ../../target/arm/tlb_helper.c:95 #9 0x0000555555e05b62 in arm_deliver_fault (cpu=0x555557354800, addr=268961344, access_type=MMU_INST_FETCH, mmu_idx=1, fi=0x7fffecff9a90) at ../../target/arm/tlb_helper.c:132 #10 0x0000555555e06095 in arm_cpu_tlb_fill (cs=0x555557354800, address=268961344, size=1, access_type=MMU_INST_FETCH, mmu_idx=1, probe=false, retaddr=0) at ../../target/arm/tlb_helper.c:260 The specific assertion changed when commit fcc7404eff24b4c added "assert not M-profile" to arm_is_secure_below_el3(), because the conditions being checked in compute_fsr_fsc() include arm_el_is_aa64(), which will end up calling arm_is_secure_below_el3() and asserting before we try to call arm_fi_to_lfsc(): #7 0x0000555555efaf43 in arm_is_secure_below_el3 (env=0x5555574665a0) at ../../target/arm/cpu.h:2396 #8 0x0000555555efb103 in arm_is_el2_enabled (env=0x5555574665a0) at ../../target/arm/cpu.h:2448 #9 0x0000555555efb204 in arm_el_is_aa64 (env=0x5555574665a0, el=1) at ../../target/arm/cpu.h:2509 #10 0x0000555555efbdfd in compute_fsr_fsc (env=0x5555574665a0, fi=0x7fffecff99e0, target_el=1, mmu_idx=1, ret_fsc=0x7fffecff996c) Avoid the assertion and the incorrect FSR format selection by explicitly making M-profile use the short-format in this function. Fixes: 452c67a42704 ("target/arm: Enable TTBCR_EAE for ARMv8-R AArch32")a Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1658 Cc: qemu-stable@nongnu.org Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson Message-id: 20230523131726.866635-1-peter.maydell@linaro.org (cherry picked from commit d7fe699be54b2cbb8e4ee37b63588b3458a49da7) Signed-off-by: Michael Tokarev --- target/arm/tlb_helper.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/target/arm/tlb_helper.c b/target/arm/tlb_helper.c index 0f4f4fc809..1384fe6f98 100644 --- a/target/arm/tlb_helper.c +++ b/target/arm/tlb_helper.c @@ -82,8 +82,17 @@ static uint32_t compute_fsr_fsc(CPUARMState *env, ARMMMUFaultInfo *fi, ARMMMUIdx arm_mmu_idx = core_to_arm_mmu_idx(env, mmu_idx); uint32_t fsr, fsc; - if (target_el == 2 || arm_el_is_aa64(env, target_el) || - arm_s1_regime_using_lpae_format(env, arm_mmu_idx)) { + /* + * For M-profile there is no guest-facing FSR. We compute a + * short-form value for env->exception.fsr which we will then + * examine in arm_v7m_cpu_do_interrupt(). In theory we could + * use the LPAE format instead as long as both bits of code agree + * (and arm_fi_to_lfsc() handled the M-profile specific + * ARMFault_QEMU_NSCExec and ARMFault_QEMU_SFault cases). + */ + if (!arm_feature(env, ARM_FEATURE_M) && + (target_el == 2 || arm_el_is_aa64(env, target_el) || + arm_s1_regime_using_lpae_format(env, arm_mmu_idx))) { /* * LPAE format fault status register : bottom 6 bits are * status code in the same form as needed for syndrome From 347714a28cc5316aab31e2a0f3758ec870cea86f Mon Sep 17 00:00:00 2001 From: Ilya Leoshkevich Date: Fri, 26 May 2023 20:12:37 +0200 Subject: [PATCH 137/174] target/s390x: Fix LCBB overwriting the top 32 bits LCBB is supposed to overwrite only the bottom 32 bits, but QEMU erroneously overwrites the entire register. Fixes: 6d9303322ed9 ("s390x/tcg: Implement LOAD COUNT TO BLOCK BOUNDARY") Cc: qemu-stable@nongnu.org Signed-off-by: Ilya Leoshkevich Message-Id: <20230526181240.1425579-2-iii@linux.ibm.com> Reviewed-by: Richard Henderson Reviewed-by: David Hildenbrand Signed-off-by: Thomas Huth (cherry picked from commit 079181b9bc60389e106009a1530d3cc42256f567) Signed-off-by: Michael Tokarev --- target/s390x/tcg/insn-data.h.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/s390x/tcg/insn-data.h.inc b/target/s390x/tcg/insn-data.h.inc index 13ffdda4da..9f0d6380be 100644 --- a/target/s390x/tcg/insn-data.h.inc +++ b/target/s390x/tcg/insn-data.h.inc @@ -486,7 +486,7 @@ F(0xb343, LCXBR, RRE, Z, x2h, x2l, new_P, x1, negf128, f128, IF_BFP) F(0xb373, LCDFR, RRE, FPSSH, 0, f2, new, f1, negf64, 0, IF_AFP1 | IF_AFP2) /* LOAD COUNT TO BLOCK BOUNDARY */ - C(0xe727, LCBB, RXE, V, la2, 0, r1, 0, lcbb, 0) + C(0xe727, LCBB, RXE, V, la2, 0, new, r1_32, lcbb, 0) /* LOAD HALFWORD */ C(0xb927, LHR, RRE, EI, 0, r2_16s, 0, r1_32, mov2, 0) C(0xb907, LGHR, RRE, EI, 0, r2_16s, 0, r1, mov2, 0) From 242efaca9e12d2dbc4dbfae6a0718e978dfa15b1 Mon Sep 17 00:00:00 2001 From: Ilya Leoshkevich Date: Fri, 26 May 2023 20:12:38 +0200 Subject: [PATCH 138/174] tests/tcg/s390x: Test LCBB Add a test to prevent regressions. Cc: qemu-stable@nongnu.org Signed-off-by: Ilya Leoshkevich Message-Id: <20230526181240.1425579-3-iii@linux.ibm.com> Reviewed-by: David Hildenbrand Acked-by: Richard Henderson Signed-off-by: Thomas Huth (cherry picked from commit 05d000fb4dcac4bc02ffa08fcf14b51683b878f6) Signed-off-by: Michael Tokarev --- tests/tcg/s390x/Makefile.target | 1 + tests/tcg/s390x/lcbb.c | 51 +++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 tests/tcg/s390x/lcbb.c diff --git a/tests/tcg/s390x/Makefile.target b/tests/tcg/s390x/Makefile.target index 07fcc6d0ce..24576fda22 100644 --- a/tests/tcg/s390x/Makefile.target +++ b/tests/tcg/s390x/Makefile.target @@ -26,6 +26,7 @@ TESTS+=branch-relative-long TESTS+=noexec Z13_TESTS=vistr +Z13_TESTS+=lcbb $(Z13_TESTS): CFLAGS+=-march=z13 -O2 TESTS+=$(Z13_TESTS) diff --git a/tests/tcg/s390x/lcbb.c b/tests/tcg/s390x/lcbb.c new file mode 100644 index 0000000000..8d368e0998 --- /dev/null +++ b/tests/tcg/s390x/lcbb.c @@ -0,0 +1,51 @@ +/* + * Test the LCBB instruction. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#include +#include + +static inline __attribute__((__always_inline__)) void +lcbb(long *r1, void *dxb2, int m3, int *cc) +{ + asm("lcbb %[r1],%[dxb2],%[m3]\n" + "ipm %[cc]" + : [r1] "+r" (*r1), [cc] "=r" (*cc) + : [dxb2] "R" (*(char *)dxb2), [m3] "i" (m3) + : "cc"); + *cc = (*cc >> 28) & 3; +} + +static char buf[0x1000] __attribute__((aligned(0x1000))); + +static inline __attribute__((__always_inline__)) void +test_lcbb(void *p, int m3, int exp_r1, int exp_cc) +{ + long r1 = 0xfedcba9876543210; + int cc; + + lcbb(&r1, p, m3, &cc); + assert(r1 == (0xfedcba9800000000 | exp_r1)); + assert(cc == exp_cc); +} + +int main(void) +{ + test_lcbb(&buf[0], 0, 16, 0); + test_lcbb(&buf[63], 0, 1, 3); + test_lcbb(&buf[0], 1, 16, 0); + test_lcbb(&buf[127], 1, 1, 3); + test_lcbb(&buf[0], 2, 16, 0); + test_lcbb(&buf[255], 2, 1, 3); + test_lcbb(&buf[0], 3, 16, 0); + test_lcbb(&buf[511], 3, 1, 3); + test_lcbb(&buf[0], 4, 16, 0); + test_lcbb(&buf[1023], 4, 1, 3); + test_lcbb(&buf[0], 5, 16, 0); + test_lcbb(&buf[2047], 5, 1, 3); + test_lcbb(&buf[0], 6, 16, 0); + test_lcbb(&buf[4095], 6, 1, 3); + + return EXIT_SUCCESS; +} From cc271aa410e6179fb2a4db2f3e1e01dc69b8f7c8 Mon Sep 17 00:00:00 2001 From: Ilya Leoshkevich Date: Fri, 26 May 2023 20:12:39 +0200 Subject: [PATCH 139/174] target/s390x: Fix LOCFHR taking the wrong half of R2 LOCFHR should write top-to-top, but QEMU erroneously writes bottom-to-top. Fixes: 45aa9aa3b773 ("target/s390x: Implement load-on-condition-2 insns") Cc: qemu-stable@nongnu.org Reported-by: Mikhail Mitskevich Closes: https://gitlab.com/qemu-project/qemu/-/issues/1668 Signed-off-by: Ilya Leoshkevich Message-Id: <20230526181240.1425579-4-iii@linux.ibm.com> Reviewed-by: Richard Henderson Reviewed-by: David Hildenbrand Signed-off-by: Thomas Huth (cherry picked from commit 3180b173621021c365c256cedf2f5845bd4780d0) Signed-off-by: Michael Tokarev --- target/s390x/tcg/insn-data.h.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/s390x/tcg/insn-data.h.inc b/target/s390x/tcg/insn-data.h.inc index 9f0d6380be..4249632af3 100644 --- a/target/s390x/tcg/insn-data.h.inc +++ b/target/s390x/tcg/insn-data.h.inc @@ -564,7 +564,7 @@ C(0xec46, LOCGHI, RIE_g, LOC2, r1, i2, r1, 0, loc, 0) C(0xec4e, LOCHHI, RIE_g, LOC2, r1_sr32, i2, new, r1_32h, loc, 0) /* LOAD HIGH ON CONDITION */ - C(0xb9e0, LOCFHR, RRF_c, LOC2, r1_sr32, r2, new, r1_32h, loc, 0) + C(0xb9e0, LOCFHR, RRF_c, LOC2, r1_sr32, r2_sr32, new, r1_32h, loc, 0) C(0xebe0, LOCFH, RSY_b, LOC2, r1_sr32, m2_32u, new, r1_32h, loc, 0) /* LOAD PAIR DISJOINT */ D(0xc804, LPD, SSF, ILA, 0, 0, new_P, r3_P32, lpd, 0, MO_TEUL) From 82fc148344d0862cfdf5364068d6123a2b777de2 Mon Sep 17 00:00:00 2001 From: Ilya Leoshkevich Date: Fri, 26 May 2023 20:12:40 +0200 Subject: [PATCH 140/174] tests/tcg/s390x: Test LOCFHR Add a small test to prevent regressions. Cc: qemu-stable@nongnu.org Signed-off-by: Ilya Leoshkevich Message-Id: <20230526181240.1425579-5-iii@linux.ibm.com> Reviewed-by: Richard Henderson Reviewed-by: David Hildenbrand Signed-off-by: Thomas Huth (cherry picked from commit 230976232f4fcdc205d6ec53ec9f3804b28dc1e7) Signed-off-by: Michael Tokarev --- tests/tcg/s390x/Makefile.target | 1 + tests/tcg/s390x/locfhr.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 tests/tcg/s390x/locfhr.c diff --git a/tests/tcg/s390x/Makefile.target b/tests/tcg/s390x/Makefile.target index 24576fda22..514ecce87d 100644 --- a/tests/tcg/s390x/Makefile.target +++ b/tests/tcg/s390x/Makefile.target @@ -27,6 +27,7 @@ TESTS+=noexec Z13_TESTS=vistr Z13_TESTS+=lcbb +Z13_TESTS+=locfhr $(Z13_TESTS): CFLAGS+=-march=z13 -O2 TESTS+=$(Z13_TESTS) diff --git a/tests/tcg/s390x/locfhr.c b/tests/tcg/s390x/locfhr.c new file mode 100644 index 0000000000..ab9ff6e449 --- /dev/null +++ b/tests/tcg/s390x/locfhr.c @@ -0,0 +1,29 @@ +/* + * Test the LOCFHR instruction. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#include +#include + +static inline __attribute__((__always_inline__)) long +locfhr(long r1, long r2, int m3, int cc) +{ + cc <<= 28; + asm("spm %[cc]\n" + "locfhr %[r1],%[r2],%[m3]\n" + : [r1] "+r" (r1) + : [cc] "r" (cc), [r2] "r" (r2), [m3] "i" (m3) + : "cc"); + return r1; +} + +int main(void) +{ + assert(locfhr(0x1111111122222222, 0x3333333344444444, 8, 0) == + 0x3333333322222222); + assert(locfhr(0x5555555566666666, 0x7777777788888888, 11, 1) == + 0x5555555566666666); + + return EXIT_SUCCESS; +} From 5502e5ca3372a1515ba7ba2aceb855b2344e1762 Mon Sep 17 00:00:00 2001 From: Ilya Leoshkevich Date: Thu, 11 May 2023 01:02:12 +0200 Subject: [PATCH 141/174] linux-user/s390x: Fix single-stepping SVC Currently single-stepping SVC executes two instructions. The reason is that EXCP_DEBUG for the SVC instruction itself is masked by EXCP_SVC. Fix by re-raising EXCP_DEBUG. Signed-off-by: Ilya Leoshkevich Message-Id: <20230510230213.330134-2-iii@linux.ibm.com> Signed-off-by: Thomas Huth (cherry picked from commit 01b9990a3fb84bb9a14017255ab1a4fa86588215) Signed-off-by: Michael Tokarev --- linux-user/s390x/cpu_loop.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/linux-user/s390x/cpu_loop.c b/linux-user/s390x/cpu_loop.c index 285bc60071..8b7ac2879e 100644 --- a/linux-user/s390x/cpu_loop.c +++ b/linux-user/s390x/cpu_loop.c @@ -86,6 +86,15 @@ void cpu_loop(CPUS390XState *env) } else if (ret != -QEMU_ESIGRETURN) { env->regs[2] = ret; } + + if (unlikely(cs->singlestep_enabled)) { + /* + * cpu_tb_exec() did not raise EXCP_DEBUG, because it has seen + * that EXCP_SVC was already pending. + */ + cs->exception_index = EXCP_DEBUG; + } + break; case EXCP_DEBUG: From c06ca3aa33b039c09166334ebc417a89bf2ecfec Mon Sep 17 00:00:00 2001 From: Ilya Leoshkevich Date: Thu, 11 May 2023 01:02:13 +0200 Subject: [PATCH 142/174] tests/tcg/s390x: Test single-stepping SVC MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a small test to prevent regressions. Signed-off-by: Ilya Leoshkevich Acked-by: Alex Bennée Message-Id: <20230510230213.330134-3-iii@linux.ibm.com> Signed-off-by: Thomas Huth (cherry picked from commit be4a4cb429617a8b6893733b37b6203e4b7bf35b) Signed-off-by: Michael Tokarev --- tests/tcg/s390x/Makefile.target | 11 ++++- tests/tcg/s390x/gdbstub/test-svc.py | 64 +++++++++++++++++++++++++++++ tests/tcg/s390x/hello-s390x-asm.S | 20 +++++++++ 3 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 tests/tcg/s390x/gdbstub/test-svc.py create mode 100644 tests/tcg/s390x/hello-s390x-asm.S diff --git a/tests/tcg/s390x/Makefile.target b/tests/tcg/s390x/Makefile.target index 514ecce87d..cb90d4183d 100644 --- a/tests/tcg/s390x/Makefile.target +++ b/tests/tcg/s390x/Makefile.target @@ -56,7 +56,16 @@ run-gdbstub-signals-s390x: signals-s390x --bin $< --test $(S390X_SRC)/gdbstub/test-signals-s390x.py, \ mixing signals and debugging) -EXTRA_RUNS += run-gdbstub-signals-s390x +hello-s390x-asm: CFLAGS+=-nostdlib + +run-gdbstub-svc: hello-s390x-asm + $(call run-test, $@, $(GDB_SCRIPT) \ + --gdb $(HAVE_GDB_BIN) \ + --qemu $(QEMU) --qargs "$(QEMU_OPTS)" \ + --bin $< --test $(S390X_SRC)/gdbstub/test-svc.py, \ + single-stepping svc) + +EXTRA_RUNS += run-gdbstub-signals-s390x run-gdbstub-svc endif # MVX versions of sha512 diff --git a/tests/tcg/s390x/gdbstub/test-svc.py b/tests/tcg/s390x/gdbstub/test-svc.py new file mode 100644 index 0000000000..7851ca7284 --- /dev/null +++ b/tests/tcg/s390x/gdbstub/test-svc.py @@ -0,0 +1,64 @@ +"""Test single-stepping SVC. + +This runs as a sourced script (via -x, via run-test.py).""" +from __future__ import print_function +import gdb +import sys + + +n_failures = 0 + + +def report(cond, msg): + """Report success/fail of a test""" + if cond: + print("PASS: {}".format(msg)) + else: + print("FAIL: {}".format(msg)) + global n_failures + n_failures += 1 + + +def run_test(): + """Run through the tests one by one""" + report("lghi\t" in gdb.execute("x/i $pc", False, True), "insn #1") + gdb.execute("si") + report("larl\t" in gdb.execute("x/i $pc", False, True), "insn #2") + gdb.execute("si") + report("lghi\t" in gdb.execute("x/i $pc", False, True), "insn #3") + gdb.execute("si") + report("svc\t" in gdb.execute("x/i $pc", False, True), "insn #4") + gdb.execute("si") + report("xgr\t" in gdb.execute("x/i $pc", False, True), "insn #5") + gdb.execute("si") + report("svc\t" in gdb.execute("x/i $pc", False, True), "insn #6") + gdb.execute("si") + + +def main(): + """Prepare the environment and run through the tests""" + try: + inferior = gdb.selected_inferior() + print("ATTACHED: {}".format(inferior.architecture().name())) + except (gdb.error, AttributeError): + print("SKIPPING (not connected)") + exit(0) + + if gdb.parse_and_eval('$pc') == 0: + print("SKIP: PC not set") + exit(0) + + try: + # These are not very useful in scripts + gdb.execute("set pagination off") + gdb.execute("set confirm off") + + # Run the actual tests + run_test() + except gdb.error: + report(False, "GDB Exception: {}".format(sys.exc_info()[0])) + print("All tests complete: %d failures" % n_failures) + exit(n_failures) + + +main() diff --git a/tests/tcg/s390x/hello-s390x-asm.S b/tests/tcg/s390x/hello-s390x-asm.S new file mode 100644 index 0000000000..2e9faa1604 --- /dev/null +++ b/tests/tcg/s390x/hello-s390x-asm.S @@ -0,0 +1,20 @@ +/* + * Hello, World! in assembly. + */ + +.globl _start +_start: + +/* puts("Hello, World!"); */ +lghi %r2,1 +larl %r3,foo +lghi %r4,foo_end-foo +svc 4 + +/* exit(0); */ +xgr %r2,%r2 +svc 1 + +.align 2 +foo: .asciz "Hello, World!\n" +foo_end: From 03727054dce3131529ca5668ffd653470000064d Mon Sep 17 00:00:00 2001 From: Ilya Leoshkevich Date: Mon, 5 Jun 2023 13:39:47 +0200 Subject: [PATCH 143/174] s390x/tcg: Fix CPU address returned by STIDP In qemu-user-s390x, /proc/cpuinfo contains: processor 0: version = 00, identification = 000000, machine = 8561 processor 1: version = 00, identification = 400000, machine = 8561 The highest nibble is supposed to contain the CPU address, but it's off by 2 bits. Fix the shift value and provide a symbolic constant for it. With the fix we get: processor 0: version = 00, identification = 000000, machine = 8561 processor 1: version = 00, identification = 100000, machine = 8561 Fixes: 076d4d39b65f ("s390x/cpumodel: wire up cpu type + id for TCG") Reviewed-by: David Hildenbrand Signed-off-by: Ilya Leoshkevich Message-Id: <20230605113950.1169228-2-iii@linux.ibm.com> Signed-off-by: Thomas Huth (cherry picked from commit 71b11cbe1c34411238703abe24bfaf2e9712c30d) Signed-off-by: Michael Tokarev --- target/s390x/cpu_models.c | 4 ++-- target/s390x/cpu_models.h | 10 +++++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/target/s390x/cpu_models.c b/target/s390x/cpu_models.c index c3a4f80633..a85c56b4ee 100644 --- a/target/s390x/cpu_models.c +++ b/target/s390x/cpu_models.c @@ -604,8 +604,8 @@ void s390_realize_cpu_model(CPUState *cs, Error **errp) #if !defined(CONFIG_USER_ONLY) cpu->env.cpuid = s390_cpuid_from_cpu_model(cpu->model); if (tcg_enabled()) { - /* basic mode, write the cpu address into the first 4 bit of the ID */ - cpu->env.cpuid = deposit64(cpu->env.cpuid, 54, 4, cpu->env.core_id); + cpu->env.cpuid = deposit64(cpu->env.cpuid, CPU_PHYS_ADDR_SHIFT, + CPU_PHYS_ADDR_BITS, cpu->env.core_id); } #endif } diff --git a/target/s390x/cpu_models.h b/target/s390x/cpu_models.h index fb1adc8b21..cc7305ec21 100644 --- a/target/s390x/cpu_models.h +++ b/target/s390x/cpu_models.h @@ -96,10 +96,18 @@ static inline bool s390_known_cpu_type(uint16_t type) { return s390_get_gen_for_cpu_type(type) != 0; } +#define CPU_ID_SHIFT 32 +#define CPU_ID_BITS 24 +/* + * When cpu_id_format is 0 (basic mode), the leftmost 4 bits of cpu_id contain + * the rightmost 4 bits of the physical CPU address. + */ +#define CPU_PHYS_ADDR_BITS 4 +#define CPU_PHYS_ADDR_SHIFT (CPU_ID_SHIFT + CPU_ID_BITS - CPU_PHYS_ADDR_BITS) static inline uint64_t s390_cpuid_from_cpu_model(const S390CPUModel *model) { return ((uint64_t)model->cpu_ver << 56) | - ((uint64_t)model->cpu_id << 32) | + ((uint64_t)model->cpu_id << CPU_ID_SHIFT) | ((uint64_t)model->def->type << 16) | (model->def->gen == 7 ? 0 : (uint64_t)model->cpu_id_format << 15); } From 8e84a20705cae1fc1cd268de06e46eaa17bf6b06 Mon Sep 17 00:00:00 2001 From: Jagannathan Raman Date: Wed, 17 May 2023 11:39:48 -0400 Subject: [PATCH 144/174] docs: fix multi-process QEMU documentation Fix a typo in the system documentation for multi-process QEMU. Signed-off-by: Jagannathan Raman Reviewed-by: Markus Armbruster Reviewed-by: Stefan Hajnoczi (cherry picked from commit 7771e8b86335968ee46538d1afd44246e7a062bc) Signed-off-by: Michael Tokarev --- docs/system/multi-process.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/system/multi-process.rst b/docs/system/multi-process.rst index 210531ee17..1b8852c27c 100644 --- a/docs/system/multi-process.rst +++ b/docs/system/multi-process.rst @@ -2,7 +2,7 @@ Multi-process QEMU ================== This document describes how to configure and use multi-process qemu. -For the design document refer to docs/devel/qemu-multiprocess. +For the design document refer to docs/devel/multi-process.rst. 1) Configuration ---------------- From 07e7102b8eb822d9c035c329382d8a3d9cf9bfd6 Mon Sep 17 00:00:00 2001 From: Mark Somerville Date: Thu, 6 Apr 2023 13:45:31 +0100 Subject: [PATCH 145/174] qga: Fix suspend on Linux guests without systemd Allow the Linux guest agent to attempt each of the suspend methods (systemctl, pm-* and writing to /sys) in turn. Prior to this guests without systemd failed to suspend due to `guest_suspend` returning early regardless of the return value of `systemd_supports_mode`. Signed-off-by: Mark Somerville Reviewed-by: Konstantin Kostiuk Signed-off-by: Konstantin Kostiuk (cherry picked from commit 86dcb6ab9b603450eb6d896cdc95286de2c7d561) Signed-off-by: Michael Tokarev --- qga/commands-posix.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/qga/commands-posix.c b/qga/commands-posix.c index 32493d6383..182eba4a38 100644 --- a/qga/commands-posix.c +++ b/qga/commands-posix.c @@ -1925,10 +1925,10 @@ static void guest_suspend(SuspendMode mode, Error **errp) if (systemd_supports_mode(mode, &local_err)) { mode_supported = true; systemd_suspend(mode, &local_err); - } - if (!local_err) { - return; + if (!local_err) { + return; + } } error_free(local_err); @@ -1937,10 +1937,10 @@ static void guest_suspend(SuspendMode mode, Error **errp) if (pmutils_supports_mode(mode, &local_err)) { mode_supported = true; pmutils_suspend(mode, &local_err); - } - if (!local_err) { - return; + if (!local_err) { + return; + } } error_free(local_err); From 10fad73a2bf1c76c8aa9d6322755e5f877d83ce5 Mon Sep 17 00:00:00 2001 From: Christian Schoenebeck Date: Wed, 7 Jun 2023 18:29:33 +0200 Subject: [PATCH 146/174] 9pfs: prevent opening special files (CVE-2023-2861) The 9p protocol does not specifically define how server shall behave when client tries to open a special file, however from security POV it does make sense for 9p server to prohibit opening any special file on host side in general. A sane Linux 9p client for instance would never attempt to open a special file on host side, it would always handle those exclusively on its guest side. A malicious client however could potentially escape from the exported 9p tree by creating and opening a device file on host side. With QEMU this could only be exploited in the following unsafe setups: - Running QEMU binary as root AND 9p 'local' fs driver AND 'passthrough' security model. or - Using 9p 'proxy' fs driver (which is running its helper daemon as root). These setups were already discouraged for safety reasons before, however for obvious reasons we are now tightening behaviour on this. Fixes: CVE-2023-2861 Reported-by: Yanwu Shen Reported-by: Jietao Xiao Reported-by: Jinku Li Reported-by: Wenbo Shen Signed-off-by: Christian Schoenebeck Reviewed-by: Greg Kurz Reviewed-by: Michael Tokarev Message-Id: (cherry picked from commit f6b0de53fb87ddefed348a39284c8e2f28dc4eda) Signed-off-by: Michael Tokarev (Mjt: drop adding qemu_fstat wrapper for 7.2 where wrappers aren't used) --- fsdev/virtfs-proxy-helper.c | 27 ++++++++++++++++++++++++-- hw/9pfs/9p-util.h | 38 +++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 2 deletions(-) diff --git a/fsdev/virtfs-proxy-helper.c b/fsdev/virtfs-proxy-helper.c index 5cafcd7703..d9511f429c 100644 --- a/fsdev/virtfs-proxy-helper.c +++ b/fsdev/virtfs-proxy-helper.c @@ -26,6 +26,7 @@ #include "qemu/xattr.h" #include "9p-iov-marshal.h" #include "hw/9pfs/9p-proxy.h" +#include "hw/9pfs/9p-util.h" #include "fsdev/9p-iov-marshal.h" #define PROGNAME "virtfs-proxy-helper" @@ -338,6 +339,28 @@ static void resetugid(int suid, int sgid) } } +/* + * Open regular file or directory. Attempts to open any special file are + * rejected. + * + * returns file descriptor or -1 on error + */ +static int open_regular(const char *pathname, int flags, mode_t mode) +{ + int fd; + + fd = open(pathname, flags, mode); + if (fd < 0) { + return fd; + } + + if (close_if_special_file(fd) < 0) { + return -1; + } + + return fd; +} + /* * send response in two parts * 1) ProxyHeader @@ -682,7 +705,7 @@ static int do_create(struct iovec *iovec) if (ret < 0) { goto unmarshal_err_out; } - ret = open(path.data, flags, mode); + ret = open_regular(path.data, flags, mode); if (ret < 0) { ret = -errno; } @@ -707,7 +730,7 @@ static int do_open(struct iovec *iovec) if (ret < 0) { goto err_out; } - ret = open(path.data, flags); + ret = open_regular(path.data, flags, 0); if (ret < 0) { ret = -errno; } diff --git a/hw/9pfs/9p-util.h b/hw/9pfs/9p-util.h index c3526144c9..6b44e5f7a4 100644 --- a/hw/9pfs/9p-util.h +++ b/hw/9pfs/9p-util.h @@ -13,6 +13,8 @@ #ifndef QEMU_9P_UTIL_H #define QEMU_9P_UTIL_H +#include "qemu/error-report.h" + #ifdef O_PATH #define O_PATH_9P_UTIL O_PATH #else @@ -112,6 +114,38 @@ static inline void close_preserve_errno(int fd) errno = serrno; } +/** + * close_if_special_file() - Close @fd if neither regular file nor directory. + * + * @fd: file descriptor of open file + * Return: 0 on regular file or directory, -1 otherwise + * + * CVE-2023-2861: Prohibit opening any special file directly on host + * (especially device files), as a compromised client could potentially gain + * access outside exported tree under certain, unsafe setups. We expect + * client to handle I/O on special files exclusively on guest side. + */ +static inline int close_if_special_file(int fd) +{ + struct stat stbuf; + + if (fstat(fd, &stbuf) < 0) { + close_preserve_errno(fd); + return -1; + } + if (!S_ISREG(stbuf.st_mode) && !S_ISDIR(stbuf.st_mode)) { + error_report_once( + "9p: broken or compromised client detected; attempt to open " + "special file (i.e. neither regular file, nor directory)" + ); + close(fd); + errno = ENXIO; + return -1; + } + + return 0; +} + static inline int openat_dir(int dirfd, const char *name) { return openat(dirfd, name, @@ -146,6 +180,10 @@ again: return -1; } + if (close_if_special_file(fd) < 0) { + return -1; + } + serrno = errno; /* O_NONBLOCK was only needed to open the file. Let's drop it. We don't * do that with O_PATH since fcntl(F_SETFL) isn't supported, and openat() From 8eb73afedc143f5ca4798d055a4cc7de39194c6c Mon Sep 17 00:00:00 2001 From: Mattias Nissler Date: Wed, 26 Apr 2023 09:35:18 +0000 Subject: [PATCH 147/174] hw/remote: Fix vfu_cfg trace offset format MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The printed offset value is prefixed with 0x, but was actually printed in decimal. To spare others the confusion, adjust the format specifier to hexadecimal. Signed-off-by: Mattias Nissler Reviewed-by: Jagannathan Raman Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: Michael Tokarev (cherry picked from commit 5fb9e8295531f957cf7ac20e89736c8963a25e04) Signed-off-by: Michael Tokarev --- hw/remote/trace-events | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/remote/trace-events b/hw/remote/trace-events index c167b3c7a5..0d1b7d56a5 100644 --- a/hw/remote/trace-events +++ b/hw/remote/trace-events @@ -5,8 +5,8 @@ mpqemu_recv_io_error(int cmd, int size, int nfds) "failed to receive %d size %d, # vfio-user-obj.c vfu_prop(const char *prop, const char *val) "vfu: setting %s as %s" -vfu_cfg_read(uint32_t offset, uint32_t val) "vfu: cfg: 0x%u -> 0x%x" -vfu_cfg_write(uint32_t offset, uint32_t val) "vfu: cfg: 0x%u <- 0x%x" +vfu_cfg_read(uint32_t offset, uint32_t val) "vfu: cfg: 0x%x -> 0x%x" +vfu_cfg_write(uint32_t offset, uint32_t val) "vfu: cfg: 0x%x <- 0x%x" vfu_dma_register(uint64_t gpa, size_t len) "vfu: registering GPA 0x%"PRIx64", %zu bytes" vfu_dma_unregister(uint64_t gpa) "vfu: unregistering GPA 0x%"PRIx64"" vfu_bar_register(int i, uint64_t addr, uint64_t size) "vfu: BAR %d: addr 0x%"PRIx64" size 0x%"PRIx64"" From 9b55660e4a4f6bfea0965b2567641492a1feac57 Mon Sep 17 00:00:00 2001 From: Anastasia Belova Date: Fri, 9 Jun 2023 12:23:06 +0300 Subject: [PATCH 148/174] vnc: move assert in vnc_worker_thread_loop job may be NULL if queue->exit is true. Check it before dereference job. Fixes: f31f9c1080 ("vnc: add magic cookie to VncState") Signed-off-by: Anastasia Belova Reviewed-by: Michael Tokarev Signed-off-by: Michael Tokarev (cherry picked from commit bdfca8a22f41e7ad47fd2dac71e4d1387e2c0d4e) Signed-off-by: Michael Tokarev --- ui/vnc-jobs.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ui/vnc-jobs.c b/ui/vnc-jobs.c index 886f9bf611..fcca7ec632 100644 --- a/ui/vnc-jobs.c +++ b/ui/vnc-jobs.c @@ -250,12 +250,13 @@ static int vnc_worker_thread_loop(VncJobQueue *queue) /* Here job can only be NULL if queue->exit is true */ job = QTAILQ_FIRST(&queue->jobs); vnc_unlock_queue(queue); - assert(job->vs->magic == VNC_MAGIC); if (queue->exit) { return -1; } + assert(job->vs->magic == VNC_MAGIC); + vnc_lock_output(job->vs); if (job->vs->ioc == NULL || job->vs->abort == true) { vnc_unlock_output(job->vs); From d31e0a384391c072bb121816ce9b7582a65cad9d Mon Sep 17 00:00:00 2001 From: Nicholas Piggin Date: Mon, 5 Jun 2023 12:54:42 +1000 Subject: [PATCH 149/174] target/ppc: Fix lqarx to set cpu_reserve lqarx does not set cpu_reserve, which causes stqcx. to never succeed. Cc: qemu-stable@nongnu.org Fixes: 94bf2658676 ("target/ppc: Use atomic load for LQ and LQARX") Fixes: 57b38ffd0c6 ("target/ppc: Use tcg_gen_qemu_{ld,st}_i128 for LQARX, LQ, STQ") Signed-off-by: Nicholas Piggin Reviewed-by: Richard Henderson Message-Id: <20230605025445.161932-1-npiggin@gmail.com> Signed-off-by: Daniel Henrique Barboza (cherry picked from commit e025e8f5a8a7e32409bb4c7c509d752486113188) Signed-off-by: Michael Tokarev --- target/ppc/translate.c | 1 + 1 file changed, 1 insertion(+) diff --git a/target/ppc/translate.c b/target/ppc/translate.c index 19c1d17cb0..1de7eca9c4 100644 --- a/target/ppc/translate.c +++ b/target/ppc/translate.c @@ -3972,6 +3972,7 @@ static void gen_lqarx(DisasContext *ctx) } tcg_temp_free(EA); + tcg_gen_mov_tl(cpu_reserve, EA); tcg_gen_st_tl(hi, cpu_env, offsetof(CPUPPCState, reserve_val)); tcg_gen_st_tl(lo, cpu_env, offsetof(CPUPPCState, reserve_val2)); } From 8e57e02ff8f655a0fca6877299e26454cc2d1165 Mon Sep 17 00:00:00 2001 From: Nicholas Piggin Date: Tue, 30 May 2023 23:21:27 +1000 Subject: [PATCH 150/174] target/ppc: Fix nested-hv HEAI delivery ppc hypervisors turn HEAI interrupts into program interrupts injected into the guest that executed the illegal instruction, if the hypervisor doesn't handle it some other way. The nested-hv implementation failed to account for this HEAI->program conversion. The virtual hypervisor wants to see the HEAI when running a nested guest, so that interrupt type can be returned to its KVM caller. Fixes: 7cebc5db2eba6 ("target/ppc: Introduce a vhyp framework for nested HV support") Cc: balaton@eik.bme.hu Reviewed-by: Fabiano Rosas Signed-off-by: Nicholas Piggin Message-Id: <20230530132127.385001-1-npiggin@gmail.com> Signed-off-by: Daniel Henrique Barboza (cherry picked from commit 6c242e79b876b3570b8fd2f10f2a502467758e56) Signed-off-by: Michael Tokarev --- target/ppc/excp_helper.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c index 30bc2e6adf..6cf88f635a 100644 --- a/target/ppc/excp_helper.c +++ b/target/ppc/excp_helper.c @@ -1358,9 +1358,12 @@ static void powerpc_excp_books(PowerPCCPU *cpu, int excp) /* * We don't want to generate a Hypervisor Emulation Assistance - * Interrupt if we don't have HVB in msr_mask (PAPR mode). + * Interrupt if we don't have HVB in msr_mask (PAPR mode), + * unless running a nested-hv guest, in which case the L1 + * kernel wants the interrupt. */ - if (excp == POWERPC_EXCP_HV_EMU && !(env->msr_mask & MSR_HVB)) { + if (excp == POWERPC_EXCP_HV_EMU && !(env->msr_mask & MSR_HVB) && + !books_vhyp_handles_hv_excp(cpu)) { excp = POWERPC_EXCP_PROGRAM; } From 6e979dba56845f472496a86e290dd56ba7431ccd Mon Sep 17 00:00:00 2001 From: Nicholas Piggin Date: Tue, 30 May 2023 23:04:47 +1000 Subject: [PATCH 151/174] target/ppc: Fix PMU hflags calculation Some of the PMU hflags bits can go out of synch, for example a store to MMCR0 with PMCjCE=1 fails to update hflags correctly and results in hflags mismatch: qemu: fatal: TCG hflags mismatch (current:0x2408003d rebuilt:0x240a003d) This can be reproduced by running perf on a recent machine. Some of the fragility here is the duplication of PMU hflags calculations. This change consolidates that in a single place to update pmu-related hflags, to be called after a well defined state changes. The post-load PMU update is pulled out of the MSR update because it does not depend on the MSR value. Fixes: 8b3d1c49a9f0 ("target/ppc: Add new PMC HFLAGS") Signed-off-by: Nicholas Piggin Reviewed-by: Daniel Henrique Barboza Message-Id: <20230530130447.372617-1-npiggin@gmail.com> Signed-off-by: Daniel Henrique Barboza (cherry picked from commit 6494d2c1fd4ebc37b575130399a97a1fcfff1afc) Signed-off-by: Michael Tokarev --- target/ppc/cpu_init.c | 2 +- target/ppc/helper_regs.c | 73 ++++++++++++++++++++++++++++++---------- target/ppc/helper_regs.h | 1 + target/ppc/machine.c | 8 ++--- target/ppc/power8-pmu.c | 38 ++++++++++++--------- target/ppc/power8-pmu.h | 4 +-- 6 files changed, 85 insertions(+), 41 deletions(-) diff --git a/target/ppc/cpu_init.c b/target/ppc/cpu_init.c index cbf0081374..294a18a5b7 100644 --- a/target/ppc/cpu_init.c +++ b/target/ppc/cpu_init.c @@ -7085,7 +7085,7 @@ static void ppc_cpu_reset(DeviceState *dev) if (env->mmu_model != POWERPC_MMU_REAL) { ppc_tlb_invalidate_all(env); } - pmu_update_summaries(env); + pmu_mmcr01_updated(env); } /* clean any pending stop state */ diff --git a/target/ppc/helper_regs.c b/target/ppc/helper_regs.c index c0aee5855b..e200091a23 100644 --- a/target/ppc/helper_regs.c +++ b/target/ppc/helper_regs.c @@ -46,6 +46,48 @@ void hreg_swap_gpr_tgpr(CPUPPCState *env) env->tgpr[3] = tmp; } +static uint32_t hreg_compute_pmu_hflags_value(CPUPPCState *env) +{ + uint32_t hflags = 0; + +#if defined(TARGET_PPC64) + if (env->spr[SPR_POWER_MMCR0] & MMCR0_PMCC0) { + hflags |= 1 << HFLAGS_PMCC0; + } + if (env->spr[SPR_POWER_MMCR0] & MMCR0_PMCC1) { + hflags |= 1 << HFLAGS_PMCC1; + } + if (env->spr[SPR_POWER_MMCR0] & MMCR0_PMCjCE) { + hflags |= 1 << HFLAGS_PMCJCE; + } + +#ifndef CONFIG_USER_ONLY + if (env->pmc_ins_cnt) { + hflags |= 1 << HFLAGS_INSN_CNT; + } + if (env->pmc_ins_cnt & 0x1e) { + hflags |= 1 << HFLAGS_PMC_OTHER; + } +#endif +#endif + + return hflags; +} + +/* Mask of all PMU hflags */ +static uint32_t hreg_compute_pmu_hflags_mask(CPUPPCState *env) +{ + uint32_t hflags_mask = 0; +#if defined(TARGET_PPC64) + hflags_mask |= 1 << HFLAGS_PMCC0; + hflags_mask |= 1 << HFLAGS_PMCC1; + hflags_mask |= 1 << HFLAGS_PMCJCE; + hflags_mask |= 1 << HFLAGS_INSN_CNT; + hflags_mask |= 1 << HFLAGS_PMC_OTHER; +#endif + return hflags_mask; +} + static uint32_t hreg_compute_hflags_value(CPUPPCState *env) { target_ulong msr = env->msr; @@ -103,30 +145,12 @@ static uint32_t hreg_compute_hflags_value(CPUPPCState *env) if (env->spr[SPR_LPCR] & LPCR_HR) { hflags |= 1 << HFLAGS_HR; } - if (env->spr[SPR_POWER_MMCR0] & MMCR0_PMCC0) { - hflags |= 1 << HFLAGS_PMCC0; - } - if (env->spr[SPR_POWER_MMCR0] & MMCR0_PMCC1) { - hflags |= 1 << HFLAGS_PMCC1; - } - if (env->spr[SPR_POWER_MMCR0] & MMCR0_PMCjCE) { - hflags |= 1 << HFLAGS_PMCJCE; - } #ifndef CONFIG_USER_ONLY if (!env->has_hv_mode || (msr & (1ull << MSR_HV))) { hflags |= 1 << HFLAGS_HV; } -#if defined(TARGET_PPC64) - if (env->pmc_ins_cnt) { - hflags |= 1 << HFLAGS_INSN_CNT; - } - if (env->pmc_ins_cnt & 0x1e) { - hflags |= 1 << HFLAGS_PMC_OTHER; - } -#endif - /* * This is our encoding for server processors. The architecture * specifies that there is no such thing as userspace with @@ -171,6 +195,8 @@ static uint32_t hreg_compute_hflags_value(CPUPPCState *env) hflags |= dmmu_idx << HFLAGS_DMMU_IDX; #endif + hflags |= hreg_compute_pmu_hflags_value(env); + return hflags | (msr & msr_mask); } @@ -179,6 +205,17 @@ void hreg_compute_hflags(CPUPPCState *env) env->hflags = hreg_compute_hflags_value(env); } +/* + * This can be used as a lighter-weight alternative to hreg_compute_hflags + * when PMU MMCR0 or pmc_ins_cnt changes. pmc_ins_cnt is changed by + * pmu_update_summaries. + */ +void hreg_update_pmu_hflags(CPUPPCState *env) +{ + env->hflags &= ~hreg_compute_pmu_hflags_mask(env); + env->hflags |= hreg_compute_pmu_hflags_value(env); +} + #ifdef CONFIG_DEBUG_TCG void cpu_get_tb_cpu_state(CPUPPCState *env, target_ulong *pc, target_ulong *cs_base, uint32_t *flags) diff --git a/target/ppc/helper_regs.h b/target/ppc/helper_regs.h index 42f26870b9..8196c1346d 100644 --- a/target/ppc/helper_regs.h +++ b/target/ppc/helper_regs.h @@ -22,6 +22,7 @@ void hreg_swap_gpr_tgpr(CPUPPCState *env); void hreg_compute_hflags(CPUPPCState *env); +void hreg_update_pmu_hflags(CPUPPCState *env); void cpu_interrupt_exittb(CPUState *cs); int hreg_store_msr(CPUPPCState *env, target_ulong value, int alter_hv); diff --git a/target/ppc/machine.c b/target/ppc/machine.c index be6eb3d968..134b16c625 100644 --- a/target/ppc/machine.c +++ b/target/ppc/machine.c @@ -21,10 +21,6 @@ static void post_load_update_msr(CPUPPCState *env) */ env->msr ^= env->msr_mask & ~((1ULL << MSR_TGPR) | MSR_HVB); ppc_store_msr(env, msr); - - if (tcg_enabled()) { - pmu_update_summaries(env); - } } static int get_avr(QEMUFile *f, void *pv, size_t size, @@ -317,6 +313,10 @@ static int cpu_post_load(void *opaque, int version_id) post_load_update_msr(env); + if (tcg_enabled()) { + pmu_mmcr01_updated(env); + } + return 0; } diff --git a/target/ppc/power8-pmu.c b/target/ppc/power8-pmu.c index 1381072b9e..fccd011088 100644 --- a/target/ppc/power8-pmu.c +++ b/target/ppc/power8-pmu.c @@ -31,7 +31,11 @@ static bool pmc_has_overflow_enabled(CPUPPCState *env, int sprn) return env->spr[SPR_POWER_MMCR0] & MMCR0_PMCjCE; } -void pmu_update_summaries(CPUPPCState *env) +/* + * Called after MMCR0 or MMCR1 changes to update pmc_ins_cnt and pmc_cyc_cnt. + * hflags must subsequently be updated. + */ +static void pmu_update_summaries(CPUPPCState *env) { target_ulong mmcr0 = env->spr[SPR_POWER_MMCR0]; target_ulong mmcr1 = env->spr[SPR_POWER_MMCR1]; @@ -39,7 +43,7 @@ void pmu_update_summaries(CPUPPCState *env) int cyc_cnt = 0; if (mmcr0 & MMCR0_FC) { - goto hflags_calc; + goto out; } if (!(mmcr0 & MMCR0_FC14) && mmcr1 != 0) { @@ -73,10 +77,19 @@ void pmu_update_summaries(CPUPPCState *env) ins_cnt |= !(mmcr0 & MMCR0_FC56) << 5; cyc_cnt |= !(mmcr0 & MMCR0_FC56) << 6; - hflags_calc: + out: env->pmc_ins_cnt = ins_cnt; env->pmc_cyc_cnt = cyc_cnt; - env->hflags = deposit32(env->hflags, HFLAGS_INSN_CNT, 1, ins_cnt != 0); +} + +void pmu_mmcr01_updated(CPUPPCState *env) +{ + pmu_update_summaries(env); + hreg_update_pmu_hflags(env); + /* + * Should this update overflow timers (if mmcr0 is updated) so they + * get set in cpu_post_load? + */ } static bool pmu_increment_insns(CPUPPCState *env, uint32_t num_insns) @@ -234,18 +247,11 @@ static void pmu_delete_timers(CPUPPCState *env) void helper_store_mmcr0(CPUPPCState *env, target_ulong value) { - bool hflags_pmcc0 = (value & MMCR0_PMCC0) != 0; - bool hflags_pmcc1 = (value & MMCR0_PMCC1) != 0; - pmu_update_cycles(env); env->spr[SPR_POWER_MMCR0] = value; - /* MMCR0 writes can change HFLAGS_PMCC[01] and HFLAGS_INSN_CNT */ - env->hflags = deposit32(env->hflags, HFLAGS_PMCC0, 1, hflags_pmcc0); - env->hflags = deposit32(env->hflags, HFLAGS_PMCC1, 1, hflags_pmcc1); - - pmu_update_summaries(env); + pmu_mmcr01_updated(env); /* Update cycle overflow timers with the current MMCR0 state */ pmu_update_overflow_timers(env); @@ -257,8 +263,7 @@ void helper_store_mmcr1(CPUPPCState *env, uint64_t value) env->spr[SPR_POWER_MMCR1] = value; - /* MMCR1 writes can change HFLAGS_INSN_CNT */ - pmu_update_summaries(env); + pmu_mmcr01_updated(env); } target_ulong helper_read_pmc(CPUPPCState *env, uint32_t sprn) @@ -287,8 +292,8 @@ static void fire_PMC_interrupt(PowerPCCPU *cpu) env->spr[SPR_POWER_MMCR0] &= ~MMCR0_FCECE; env->spr[SPR_POWER_MMCR0] |= MMCR0_FC; - /* Changing MMCR0_FC requires a new HFLAGS_INSN_CNT calc */ - pmu_update_summaries(env); + /* Changing MMCR0_FC requires summaries and hflags update */ + pmu_mmcr01_updated(env); /* * Delete all pending timers if we need to freeze @@ -299,6 +304,7 @@ static void fire_PMC_interrupt(PowerPCCPU *cpu) } if (env->spr[SPR_POWER_MMCR0] & MMCR0_PMAE) { + /* These MMCR0 bits do not require summaries or hflags update. */ env->spr[SPR_POWER_MMCR0] &= ~MMCR0_PMAE; env->spr[SPR_POWER_MMCR0] |= MMCR0_PMAO; } diff --git a/target/ppc/power8-pmu.h b/target/ppc/power8-pmu.h index c0093e2219..775e640053 100644 --- a/target/ppc/power8-pmu.h +++ b/target/ppc/power8-pmu.h @@ -18,10 +18,10 @@ #define PMC_COUNTER_NEGATIVE_VAL 0x80000000UL void cpu_ppc_pmu_init(CPUPPCState *env); -void pmu_update_summaries(CPUPPCState *env); +void pmu_mmcr01_updated(CPUPPCState *env); #else static inline void cpu_ppc_pmu_init(CPUPPCState *env) { } -static inline void pmu_update_summaries(CPUPPCState *env) { } +static inline void pmu_mmcr01_updated(CPUPPCState *env) { } #endif #endif From 4fc28bf08a147f24c4817fa740e24d458ed29ec2 Mon Sep 17 00:00:00 2001 From: Yin Wang Date: Fri, 19 May 2023 10:37:58 +0800 Subject: [PATCH 152/174] hw/riscv: qemu crash when NUMA nodes exceed available CPUs Command "qemu-system-riscv64 -machine virt -m 2G -smp 1 -numa node,mem=1G -numa node,mem=1G" would trigger this problem.Backtrace with: #0 0x0000555555b5b1a4 in riscv_numa_get_default_cpu_node_id at ../hw/riscv/numa.c:211 #1 0x00005555558ce510 in machine_numa_finish_cpu_init at ../hw/core/machine.c:1230 #2 0x00005555558ce9d3 in machine_run_board_init at ../hw/core/machine.c:1346 #3 0x0000555555aaedc3 in qemu_init_board at ../softmmu/vl.c:2513 #4 0x0000555555aaf064 in qmp_x_exit_preconfig at ../softmmu/vl.c:2609 #5 0x0000555555ab1916 in qemu_init at ../softmmu/vl.c:3617 #6 0x000055555585463b in main at ../softmmu/main.c:47 This commit fixes the issue by adding parameter checks. Reviewed-by: Alistair Francis Reviewed-by: Daniel Henrique Barboza Reviewed-by: LIU Zhiwei Reviewed-by: Weiwei Li Signed-off-by: Yin Wang Message-Id: <20230519023758.1759434-1-yin.wang@intel.com> Signed-off-by: Alistair Francis (cherry picked from commit b9cedbf19cb4be04908a3a623f0f237875483499) Signed-off-by: Michael Tokarev --- hw/riscv/numa.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hw/riscv/numa.c b/hw/riscv/numa.c index 7fe92d402f..edf6750f54 100644 --- a/hw/riscv/numa.c +++ b/hw/riscv/numa.c @@ -207,6 +207,12 @@ int64_t riscv_numa_get_default_cpu_node_id(const MachineState *ms, int idx) { int64_t nidx = 0; + if (ms->numa_state->num_nodes > ms->smp.cpus) { + error_report("Number of NUMA nodes (%d)" + " cannot exceed the number of available CPUs (%d).", + ms->numa_state->num_nodes, ms->smp.max_cpus); + exit(EXIT_FAILURE); + } if (ms->numa_state->num_nodes) { nidx = idx / (ms->smp.cpus / ms->numa_state->num_nodes); if (ms->numa_state->num_nodes <= nidx) { From 23315ad0b8c04423fd274e9c571ae2cee9bd50c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Date: Wed, 7 Jun 2023 06:39:32 +0200 Subject: [PATCH 153/174] aspeed/hace: Initialize g_autofree pointer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As mentioned in docs/devel/style.rst "Automatic memory deallocation": * Variables declared with g_auto* MUST always be initialized, otherwise the cleanup function will use uninitialized stack memory This avoids QEMU to coredump when running the "hash test" command under Zephyr. Cc: Steven Lee Cc: Joel Stanley Cc: qemu-stable@nongnu.org Fixes: c5475b3f9a ("hw: Model ASPEED's Hash and Crypto Engine") Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Alex Bennée Reviewed-by: Thomas Huth Reviewed-by: Francisco Iglesias Message-Id: <20230421131547.2177449-1-clg@kaod.org> Signed-off-by: Cédric Le Goater Reviewed-by: Joel Stanley Signed-off-by: Cédric Le Goater (cherry picked from commit c8f48b120b31f6bbe33135ef5d478e485c37e3c2) Signed-off-by: Michael Tokarev --- hw/misc/aspeed_hace.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/misc/aspeed_hace.c b/hw/misc/aspeed_hace.c index ac21be306c..69175e972d 100644 --- a/hw/misc/aspeed_hace.c +++ b/hw/misc/aspeed_hace.c @@ -189,7 +189,7 @@ static void do_hash_operation(AspeedHACEState *s, int algo, bool sg_mode, bool acc_mode) { struct iovec iov[ASPEED_HACE_MAX_SG]; - g_autofree uint8_t *digest_buf; + g_autofree uint8_t *digest_buf = NULL; size_t digest_len = 0; int niov = 0; int i; From 1bc596d079dba75794560e0b52f1b0cb7d5dd3a4 Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Mon, 19 Jun 2023 11:20:18 +0100 Subject: [PATCH 154/174] target/arm: Fix return value from LDSMIN/LDSMAX 8/16 bit atomics The atomic memory operations are supposed to return the old memory data value in the destination register. This value is not sign-extended, even if the operation is the signed minimum or maximum. (In the pseudocode for the instructions the returned data value is passed to ZeroExtend() to create the value in the register.) We got this wrong because we were doing a 32-to-64 zero extend on the result for 8 and 16 bit data values, rather than the correct amount of zero extension. Fix the bug by using ext8u and ext16u for the MO_8 and MO_16 data sizes rather than ext32u. Cc: qemu-stable@nongnu.org Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson Message-id: 20230602155223.2040685-2-peter.maydell@linaro.org (cherry picked from commit 243705aa6ea3465b20e9f5a8bfcf36d3153f3c10) Signed-off-by: Michael Tokarev --- target/arm/translate-a64.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index 2ee171f249..3c356d238f 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -3536,8 +3536,22 @@ static void disas_ldst_atomic(DisasContext *s, uint32_t insn, */ fn(tcg_rt, clean_addr, tcg_rs, get_mem_index(s), mop); - if ((mop & MO_SIGN) && size != MO_64) { - tcg_gen_ext32u_i64(tcg_rt, tcg_rt); + if (mop & MO_SIGN) { + switch (size) { + case MO_8: + tcg_gen_ext8u_i64(tcg_rt, tcg_rt); + break; + case MO_16: + tcg_gen_ext16u_i64(tcg_rt, tcg_rt); + break; + case MO_32: + tcg_gen_ext32u_i64(tcg_rt, tcg_rt); + break; + case MO_64: + break; + default: + g_assert_not_reached(); + } } } From d0040c60f7185477fe0080e6d09f052adf86c572 Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Mon, 19 Jun 2023 11:20:18 +0100 Subject: [PATCH 155/174] target/arm: Return correct result for LDG when ATA=0 The LDG instruction loads the tag from a memory address (identified by [Xn + offset]), and then merges that tag into the destination register Xt. We implemented this correctly for the case when allocation tags are enabled, but didn't get it right when ATA=0: instead of merging the tag bits into Xt, we merged them into the memory address [Xn + offset] and then set Xt to that. Merge the tag bits into the old Xt value, as they should be. Cc: qemu-stable@nongnu.org Fixes: c15294c1e36a7dd9b25 ("target/arm: Implement LDG, STG, ST2G instructions") Reviewed-by: Richard Henderson Signed-off-by: Peter Maydell (cherry picked from commit 7e2788471f9e079fff696a694721a7d41a451839) Signed-off-by: Michael Tokarev --- target/arm/translate-a64.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index 3c356d238f..f0b8db7ce5 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -4190,9 +4190,13 @@ static void disas_ldst_tag(DisasContext *s, uint32_t insn) if (s->ata) { gen_helper_ldg(tcg_rt, cpu_env, addr, tcg_rt); } else { + /* + * Tag access disabled: we must check for aborts on the load + * load from [rn+offset], and then insert a 0 tag into rt. + */ clean_addr = clean_data_tbi(s, addr); gen_probe_access(s, clean_addr, MMU_DATA_LOAD, MO_8); - gen_address_with_allocation_tag0(tcg_rt, addr); + gen_address_with_allocation_tag0(tcg_rt, tcg_rt); } } else { tcg_rt = cpu_reg_sp(s, rt); From 09dd3f2cae7606fb9282eda820ef9324f6d4383f Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Tue, 6 Jun 2023 11:46:08 +0100 Subject: [PATCH 156/174] hw/intc/allwinner-a10-pic: Handle IRQ levels other than 0 or 1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In commit 2c5fa0778c3b430 we fixed an endianness bug in the Allwinner A10 PIC model; however in the process we introduced a regression. This is because the old code was robust against the incoming 'level' argument being something other than 0 or 1, whereas the new code was not. In particular, the allwinner-sdhost code treats its IRQ line as 0-vs-non-0 rather than 0-vs-1, so when the SD controller set its IRQ line for any reason other than transmit the interrupt controller would ignore it. The observed effect was a guest timeout when rebooting the guest kernel. Handle level values other than 0 or 1, to restore the old behaviour. Fixes: 2c5fa0778c3b430 ("hw/intc/allwinner-a10-pic: Don't use set_bit()/clear_bit()") (Mjt: 5eb742fce562dc7 in stable-7.2) Cc: qemu-stable@nongnu.org Signed-off-by: Peter Maydell Reviewed-by: Philippe Mathieu-Daudé Tested-by: Guenter Roeck Message-id: 20230606104609.3692557-2-peter.maydell@linaro.org (cherry picked from commit f837b468cdaa7e736b5385c7dc4f8c5adcad3bf1) Signed-off-by: Michael Tokarev --- hw/intc/allwinner-a10-pic.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/intc/allwinner-a10-pic.c b/hw/intc/allwinner-a10-pic.c index 4875e68ba6..d0bf8d545b 100644 --- a/hw/intc/allwinner-a10-pic.c +++ b/hw/intc/allwinner-a10-pic.c @@ -51,7 +51,7 @@ static void aw_a10_pic_set_irq(void *opaque, int irq, int level) AwA10PICState *s = opaque; uint32_t *pending_reg = &s->irq_pending[irq / 32]; - *pending_reg = deposit32(*pending_reg, irq % 32, 1, level); + *pending_reg = deposit32(*pending_reg, irq % 32, 1, !!level); aw_a10_pic_update(s); } From 04de6cb0027c86e628ae0c64ca06b6f05b475c53 Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Tue, 6 Jun 2023 14:49:17 +0100 Subject: [PATCH 157/174] hw/timer/nrf51_timer: Don't lose time when timer is queried in tight loop The nrf51_timer has a free-running counter which we implement using the pattern of using two fields (update_counter_ns, counter) to track the last point at which we calculated the counter value, and the counter value at that time. Then we can find the current counter value by converting the difference in wall-clock time between then and now to a tick count that we need to add to the counter value. Unfortunately the nrf51_timer's implementation of this has a bug which means it loses time every time update_counter() is called. After updating s->counter it always sets s->update_counter_ns to 'now', even though the actual point when s->counter hit the new value will be some point in the past (half a tick, say). In the worst case (guest code in a tight loop reading the counter, icount mode) the counter is continually queried less than a tick after it was last read, so s->counter never advances but s->update_counter_ns does, and the guest never makes forward progress. The fix for this is to only advance update_counter_ns to the timestamp of the last tick, not all the way to 'now'. (This is the pattern used in hw/misc/mps2-fpgaio.c's counter.) Cc: qemu-stable@nongnu.org Signed-off-by: Peter Maydell Reviewed-by: Joel Stanley Message-id: 20230606134917.3782215-1-peter.maydell@linaro.org (cherry picked from commit d2f9a79a8cf6ab992e1d0f27ad05b3e582d2b18a) Signed-off-by: Michael Tokarev --- hw/timer/nrf51_timer.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/hw/timer/nrf51_timer.c b/hw/timer/nrf51_timer.c index 42be79c736..50c6772383 100644 --- a/hw/timer/nrf51_timer.c +++ b/hw/timer/nrf51_timer.c @@ -45,7 +45,12 @@ static uint32_t update_counter(NRF51TimerState *s, int64_t now) uint32_t ticks = ns_to_ticks(s, now - s->update_counter_ns); s->counter = (s->counter + ticks) % BIT(bitwidths[s->bitmode]); - s->update_counter_ns = now; + /* + * Only advance the sync time to the timestamp of the last tick, + * not all the way to 'now', so we don't lose time if we do + * multiple resyncs in a single tick. + */ + s->update_counter_ns += ticks_to_ns(s, ticks); return ticks; } From 29191ea6a5203d26343d80238d1501cc15ba6b05 Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Thu, 22 Jun 2023 14:08:23 +0100 Subject: [PATCH 158/174] host-utils: Avoid using __builtin_subcll on buggy versions of Apple Clang MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We use __builtin_subcll() to do a 64-bit subtract with borrow-in and borrow-out when the host compiler supports it. Unfortunately some versions of Apple Clang have a bug in their implementation of this intrinsic which means it returns the wrong value. The effect is that a QEMU built with the affected compiler will hang when emulating x86 or m68k float80 division. The upstream LLVM issue is: https://github.com/llvm/llvm-project/issues/55253 The commit that introduced the bug apparently never made it into an upstream LLVM release without the subsequent fix https://github.com/llvm/llvm-project/commit/fffb6e6afdbaba563189c1f715058ed401fbc88d but unfortunately it did make it into Apple Clang 14.0, as shipped in Xcode 14.3 (14.2 is reported to be OK). The Apple bug number is FB12210478. Add ifdefs to avoid use of __builtin_subcll() on Apple Clang version 14 or greater. There is not currently a version of Apple Clang which has the bug fix -- when one appears we should be able to add an upper bound to the ifdef condition so we can start using the builtin again. We make the lower bound a conservative "any Apple clang with major version 14 or greater" because the consequences of incorrectly disabling the builtin when it would work are pretty small and the consequences of not disabling it when we should are pretty bad. Many thanks to those users who both reported this bug and also did a lot of work in identifying the root cause; in particular to Daniel Bertalan and osy. Cc: qemu-stable@nongnu.org Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1631 Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1659 Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson Reviewed-by: Daniel P. Berrangé Tested-by: Daniel Bertalan Tested-by: Tested-By: Solra Bizna Message-id: 20230622130823.1631719-1-peter.maydell@linaro.org (cherry picked from commit b0438861efe1dfbdfdd9fa1d9aa05100d37ea8ee) Signed-off-by: Michael Tokarev --- include/qemu/compiler.h | 13 +++++++++++++ include/qemu/host-utils.h | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/include/qemu/compiler.h b/include/qemu/compiler.h index f20a76e4a2..c7ffcaba43 100644 --- a/include/qemu/compiler.h +++ b/include/qemu/compiler.h @@ -184,4 +184,17 @@ #define QEMU_DISABLE_CFI #endif +/* + * Apple clang version 14 has a bug in its __builtin_subcll(); define + * BUILTIN_SUBCLL_BROKEN for the offending versions so we can avoid it. + * When a version of Apple clang which has this bug fixed is released + * we can add an upper bound to this check. + * See https://gitlab.com/qemu-project/qemu/-/issues/1631 + * and https://gitlab.com/qemu-project/qemu/-/issues/1659 for details. + * The bug never made it into any upstream LLVM releases, only Apple ones. + */ +#if defined(__apple_build_version__) && __clang_major__ >= 14 +#define BUILTIN_SUBCLL_BROKEN +#endif + #endif /* COMPILER_H */ diff --git a/include/qemu/host-utils.h b/include/qemu/host-utils.h index 88d476161c..b3434ec0bc 100644 --- a/include/qemu/host-utils.h +++ b/include/qemu/host-utils.h @@ -596,7 +596,7 @@ static inline uint64_t uadd64_carry(uint64_t x, uint64_t y, bool *pcarry) */ static inline uint64_t usub64_borrow(uint64_t x, uint64_t y, bool *pborrow) { -#if __has_builtin(__builtin_subcll) +#if __has_builtin(__builtin_subcll) && !defined(BUILTIN_SUBCLL_BROKEN) unsigned long long b = *pborrow; x = __builtin_subcll(x, y, b, &b); *pborrow = b & 1; From 601f084ef7ac467228293e05ddc40217239dc61b Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Tue, 20 Jun 2023 17:20:24 +0100 Subject: [PATCH 159/174] pc-bios/keymaps: Use the official xkb name for Arabic layout, not the legacy synonym MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The xkb official name for the Arabic keyboard layout is 'ara'. However xkb has for at least the past 15 years also permitted it to be named via the legacy synonym 'ar'. In xkeyboard-config 2.39 this synoynm was removed, which breaks compilation of QEMU: FAILED: pc-bios/keymaps/ar /home/fred/qemu-git/src/qemu/build-full/qemu-keymap -f pc-bios/keymaps/ar -l ar xkbcommon: ERROR: Couldn't find file "symbols/ar" in include paths xkbcommon: ERROR: 1 include paths searched: xkbcommon: ERROR: /usr/share/X11/xkb xkbcommon: ERROR: 3 include paths could not be added: xkbcommon: ERROR: /home/fred/.config/xkb xkbcommon: ERROR: /home/fred/.xkb xkbcommon: ERROR: /etc/xkb xkbcommon: ERROR: Abandoning symbols file "(unnamed)" xkbcommon: ERROR: Failed to compile xkb_symbols xkbcommon: ERROR: Failed to compile keymap The upstream xkeyboard-config change removing the compat mapping is: https://gitlab.freedesktop.org/xkeyboard-config/xkeyboard-config/-/commit/470ad2cd8fea84d7210377161d86b31999bb5ea6 Make QEMU always ask for the 'ara' xkb layout, which should work on both older and newer xkeyboard-config. We leave the QEMU name for this keyboard layout as 'ar'; it is not the only one where our name for it deviates from the xkb standard name. Cc: qemu-stable@nongnu.org Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Daniel P. Berrangé Message-id: 20230620162024.1132013-1-peter.maydell@linaro.org Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1709 (cherry picked from commit 497fad38979c16b6412388927401e577eba43d26) Signed-off-by: Michael Tokarev --- pc-bios/keymaps/meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pc-bios/keymaps/meson.build b/pc-bios/keymaps/meson.build index 06c75e646b..452395b962 100644 --- a/pc-bios/keymaps/meson.build +++ b/pc-bios/keymaps/meson.build @@ -1,5 +1,5 @@ keymaps = { - 'ar': '-l ar', + 'ar': '-l ara', 'bepo': '-l fr -v dvorak', 'cz': '-l cz', 'da': '-l dk', From 6331b12d6074b6f0f613226fd33849e684b7d4da Mon Sep 17 00:00:00 2001 From: Helge Deller Date: Fri, 23 Jun 2023 08:24:30 +0200 Subject: [PATCH 160/174] target/hppa: Fix OS reboot issues When the OS triggers a reboot, the reset helper function sends a qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET) together with an EXCP_HLT exception to halt the CPUs. So, at reboot when initializing the CPUs again, make sure to set all instruction pointers to the firmware entry point, disable any interrupts, disable data and instruction translations, enable PSW_Q bit and tell qemu to unhalt (halted=0) the CPUs again. This fixes the various reboot issues which were seen when rebooting a Linux VM, including the case where even the monarch CPU has been virtually halted from the OS (e.g. via "chcpu -d 0" inside the Linux VM). Signed-off-by: Helge Deller (cherry picked from commit 50ba97e928b44ff5bc731c9ffe68d86acbe44639) Signed-off-by: Michael Tokarev --- hw/hppa/machine.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/hw/hppa/machine.c b/hw/hppa/machine.c index de1cc7ab71..b54148e5fb 100644 --- a/hw/hppa/machine.c +++ b/hw/hppa/machine.c @@ -418,10 +418,16 @@ static void hppa_machine_reset(MachineState *ms, ShutdownCause reason) /* Start all CPUs at the firmware entry point. * Monarch CPU will initialize firmware, secondary CPUs - * will enter a small idle look and wait for rendevouz. */ + * will enter a small idle loop and wait for rendevouz. */ for (i = 0; i < smp_cpus; i++) { - cpu_set_pc(CPU(cpu[i]), firmware_entry); + CPUState *cs = CPU(cpu[i]); + + cpu_set_pc(cs, firmware_entry); + cpu[i]->env.psw = PSW_Q; cpu[i]->env.gr[5] = CPU_HPA + i * 0x1000; + + cs->exception_index = -1; + cs->halted = 0; } /* already initialized by machine_hppa_init()? */ From 51c48a919d364ce49b544bf8567256ce356d6c13 Mon Sep 17 00:00:00 2001 From: Helge Deller Date: Sat, 24 Jun 2023 00:28:44 +0200 Subject: [PATCH 161/174] target/hppa: Provide qemu version via fw_cfg to firmware Give current QEMU version string to SeaBIOS-hppa via fw_cfg interface so that the firmware can show the QEMU version in the boot menu info. Signed-off-by: Helge Deller (cherry picked from commit 069d296669448b9eef72c6332ae84af962d9582c) Signed-off-by: Michael Tokarev --- hw/hppa/machine.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/hw/hppa/machine.c b/hw/hppa/machine.c index b54148e5fb..98a78b84b4 100644 --- a/hw/hppa/machine.c +++ b/hw/hppa/machine.c @@ -123,6 +123,7 @@ static FWCfgState *create_fw_cfg(MachineState *ms) { FWCfgState *fw_cfg; uint64_t val; + const char qemu_version[] = QEMU_VERSION; fw_cfg = fw_cfg_init_mem(FW_CFG_IO_BASE, FW_CFG_IO_BASE + 4); fw_cfg_add_i16(fw_cfg, FW_CFG_NB_CPUS, ms->smp.cpus); @@ -148,6 +149,10 @@ static FWCfgState *create_fw_cfg(MachineState *ms) fw_cfg_add_i16(fw_cfg, FW_CFG_BOOT_DEVICE, ms->boot_config.order[0]); qemu_register_boot_set(fw_cfg_boot_set, fw_cfg); + fw_cfg_add_file(fw_cfg, "/etc/qemu-version", + g_memdup(qemu_version, sizeof(qemu_version)), + sizeof(qemu_version)); + return fw_cfg; } From 7b7474947fcf922a31368f17dfc24f59079342d1 Mon Sep 17 00:00:00 2001 From: Helge Deller Date: Tue, 20 Jun 2023 21:39:47 +0200 Subject: [PATCH 162/174] target/hppa: New SeaBIOS-hppa version 7 Update SeaBIOS-hppa to version 7 which fixes a boot problem with Debian-12 install CD images. The problem with Debian-12 is, that the ramdisc got bigger than what the firmware could load in one call to the LSI scsi driver. Signed-off-by: Helge Deller (cherry picked from commit bb9c998ca9343d445c76b69fa15dea9db692f526) Signed-off-by: Michael Tokarev (Mjt: pick this one before picking next 34ec3aea54368a92b6 "SeaBIOS-hppa version 8") --- pc-bios/hppa-firmware.img | Bin 719368 -> 719376 bytes roms/seabios-hppa | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/pc-bios/hppa-firmware.img b/pc-bios/hppa-firmware.img index b2cbb71ee0f91623d038db04d6900a5ed17472a6..e7660b0458b78b101c7ed2dc17595e94438ffeb8 100644 GIT binary patch delta 225597 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 delta 224920 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

&93x-sa>C{NP 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
2{R%Fmzj@O$<;D&444OK%0>0#qESY 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 &Km%hgJ;AoRPJ-iP~{9zjJi6Gb&dl)6Ou@ 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 Date: Mon, 29 May 2023 17:13:32 +0530 Subject: [PATCH 164/174] vhost: release memory_listener object in error path vhost_dev_start function does not release memory_listener object in case of an error. This may crash the guest when vhost is unable to set memory table: stack trace of thread 125653: Program terminated with signal SIGSEGV, Segmentation fault #0 memory_listener_register (qemu-kvm + 0x6cda0f) #1 vhost_dev_start (qemu-kvm + 0x699301) #2 vhost_net_start (qemu-kvm + 0x45b03f) #3 virtio_net_set_status (qemu-kvm + 0x665672) #4 qmp_set_link (qemu-kvm + 0x548fd5) #5 net_vhost_user_event (qemu-kvm + 0x552c45) #6 tcp_chr_connect (qemu-kvm + 0x88d473) #7 tcp_chr_new_client (qemu-kvm + 0x88cf83) #8 tcp_chr_accept (qemu-kvm + 0x88b429) #9 qio_net_listener_channel_func (qemu-kvm + 0x7ac07c) #10 g_main_context_dispatch (libglib-2.0.so.0 + 0x54e2f) Release memory_listener objects in the error path. Signed-off-by: Prasad Pandit Message-Id: <20230529114333.31686-2-ppandit@redhat.com> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Reviewed-by: Peter Xu Fixes: c471ad0e9b ("vhost_net: device IOTLB support") Cc: qemu-stable@nongnu.org Acked-by: Jason Wang (cherry picked from commit 1e3ffb34f764f8ac4c003b2b2e6a775b2b073a16) Signed-off-by: Michael Tokarev --- hw/virtio/vhost.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index fdcd1a8fdf..f38997b3f6 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -1934,6 +1934,9 @@ fail_vq: } fail_mem: + if (vhost_dev_has_iommu(hdev)) { + memory_listener_unregister(&hdev->iommu_listener); + } fail_features: vdev->vhost_started = false; hdev->started = false; From bc1a3a177482fada68c08efcc9580b01fa1c7a45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= Date: Fri, 2 Jun 2023 19:34:51 +0200 Subject: [PATCH 165/174] vdpa: fix not using CVQ buffer in case of error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug introducing when refactoring. Otherway, the guest never received the used buffer. Fixes: be4278b65fc1 ("vdpa: extract vhost_vdpa_net_cvq_add from vhost_vdpa_net_handle_ctrl_avail") Signed-off-by: Eugenio Pérez Message-Id: <20230602173451.1917999-1-eperezma@redhat.com> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Acked-by: Jason Wang Tested-by: Lei Yang (cherry picked from commit d45243bcfc61a3c34f96a4fc34bffcb9929daba0) Signed-off-by: Michael Tokarev --- net/vhost-vdpa.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c index 2b4b85d8f8..71a7dd1586 100644 --- a/net/vhost-vdpa.c +++ b/net/vhost-vdpa.c @@ -500,7 +500,7 @@ static int vhost_vdpa_net_handle_ctrl_avail(VhostShadowVirtqueue *svq, } if (*s->status != VIRTIO_NET_OK) { - return VIRTIO_NET_ERR; + goto out; } status = VIRTIO_NET_ERR; From 3d12598b74ed4bcc6db8b50818a95c4b770d4487 Mon Sep 17 00:00:00 2001 From: Ani Sinha Date: Mon, 19 Jun 2023 12:22:09 +0530 Subject: [PATCH 166/174] vhost-vdpa: do not cleanup the vdpa/vhost-net structures if peer nic is present When a peer nic is still attached to the vdpa backend, it is too early to free up the vhost-net and vdpa structures. If these structures are freed here, then QEMU crashes when the guest is being shut down. The following call chain would result in an assertion failure since the pointer returned from vhost_vdpa_get_vhost_net() would be NULL: do_vm_stop() -> vm_state_notify() -> virtio_set_status() -> virtio_net_vhost_status() -> get_vhost_net(). Therefore, we defer freeing up the structures until at guest shutdown time when qemu_cleanup() calls net_cleanup() which then calls qemu_del_net_client() which would eventually call vhost_vdpa_cleanup() again to free up the structures. This time, the loop in net_cleanup() ensures that vhost_vdpa_cleanup() will be called one last time when all the peer nics are detached and freed. All unit tests pass with this change. CC: imammedo@redhat.com CC: jusual@redhat.com CC: mst@redhat.com Fixes: CVE-2023-3301 Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2128929 Signed-off-by: Ani Sinha Message-Id: <20230619065209.442185-1-anisinha@redhat.com> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin (cherry picked from commit a0d7215e339b61c7d7a7b3fcf754954d80d93eb8) Signed-off-by: Michael Tokarev (Mjt: context change for stable-7.2) --- net/vhost-vdpa.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c index 71a7dd1586..acdf3cb96c 100644 --- a/net/vhost-vdpa.c +++ b/net/vhost-vdpa.c @@ -160,6 +160,14 @@ static void vhost_vdpa_cleanup(NetClientState *nc) VhostVDPAState *s = DO_UPCAST(VhostVDPAState, nc, nc); struct vhost_dev *dev = &s->vhost_net->dev; + /* + * If a peer NIC is attached, do not cleanup anything. + * Cleanup will happen as a part of qemu_cleanup() -> net_cleanup() + * when the guest is shutting down. + */ + if (nc->peer && nc->peer->info->type == NET_CLIENT_DRIVER_NIC) { + return; + } qemu_vfree(s->cvq_cmd_out_buffer); qemu_vfree(s->status); if (dev->vq_index + dev->nvqs == dev->vq_index_end) { From 44acbc773659a39ba9aecdaf39441ad369d2f596 Mon Sep 17 00:00:00 2001 From: Vivek Kasireddy Date: Thu, 22 Jun 2023 23:04:54 -0700 Subject: [PATCH 167/174] virtio-gpu: Make non-gl display updates work again when blob=true MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In the case where the console does not have gl capability, and if blob is set to true, make sure that the display updates still work. Commit e86a93f55463 accidentally broke this by misplacing the return statement (in resource_flush) causing the updates to be silently ignored. Fixes: e86a93f55463 ("virtio-gpu: splitting one extended mode guest fb into n-scanouts") Cc: Gerd Hoffmann Cc: Marc-André Lureau Cc: Dongwon Kim Signed-off-by: Vivek Kasireddy Reviewed-by: Marc-André Lureau Message-ID: <20230623060454.3749910-1-vivek.kasireddy@intel.com> (cherry picked from commit 34e29d85a7734802317c4cac9ad52b10d461c1dc) Signed-off-by: Michael Tokarev --- hw/display/virtio-gpu.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c index 5e15c79b94..4e2e0dd53a 100644 --- a/hw/display/virtio-gpu.c +++ b/hw/display/virtio-gpu.c @@ -498,6 +498,8 @@ static void virtio_gpu_resource_flush(VirtIOGPU *g, struct virtio_gpu_resource_flush rf; struct virtio_gpu_scanout *scanout; pixman_region16_t flush_region; + bool within_bounds = false; + bool update_submitted = false; int i; VIRTIO_GPU_FILL_CMD(rf); @@ -518,13 +520,28 @@ static void virtio_gpu_resource_flush(VirtIOGPU *g, rf.r.x < scanout->x + scanout->width && rf.r.x + rf.r.width >= scanout->x && rf.r.y < scanout->y + scanout->height && - rf.r.y + rf.r.height >= scanout->y && - console_has_gl(scanout->con)) { - dpy_gl_update(scanout->con, 0, 0, scanout->width, - scanout->height); + rf.r.y + rf.r.height >= scanout->y) { + within_bounds = true; + + if (console_has_gl(scanout->con)) { + dpy_gl_update(scanout->con, 0, 0, scanout->width, + scanout->height); + update_submitted = true; + } } } - return; + + if (update_submitted) { + return; + } + if (!within_bounds) { + qemu_log_mask(LOG_GUEST_ERROR, "%s: flush bounds outside scanouts" + " bounds for flush %d: %d %d %d %d\n", + __func__, rf.resource_id, rf.r.x, rf.r.y, + rf.r.width, rf.r.height); + cmd->error = VIRTIO_GPU_RESP_ERR_INVALID_PARAMETER; + return; + } } if (!res->blob && From f8e3b3290c83c20ed873e5d289c8d2c7f6f46fd3 Mon Sep 17 00:00:00 2001 From: Nicholas Piggin Date: Tue, 27 Jun 2023 16:14:06 +1000 Subject: [PATCH 168/174] icount: don't adjust virtual time backwards after warp The icount-based QEMU_CLOCK_VIRTUAL runs ahead of the RT clock at times. When warping, it is possible it is still ahead at the end of the warp, which causes icount adaptive mode to adjust it backward. This can result in the machine observing time going backwards. Prevent this by clamping adaptive adjustment to 0 at minimum. Signed-off-by: Nicholas Piggin Message-ID: <20230627061406.241847-1-npiggin@gmail.com> Cc: qemu-stable@nongnu.org Signed-off-by: Paolo Bonzini (cherry picked from commit 67f85346ca9305d9fb3254ceff735ceaadeb0911) Signed-off-by: Michael Tokarev --- softmmu/icount.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/softmmu/icount.c b/softmmu/icount.c index 4504433e16..a5cef9c60a 100644 --- a/softmmu/icount.c +++ b/softmmu/icount.c @@ -259,11 +259,16 @@ static void icount_warp_rt(void) warp_delta = clock - timers_state.vm_clock_warp_start; if (icount_enabled() == 2) { /* - * In adaptive mode, do not let QEMU_CLOCK_VIRTUAL run too - * far ahead of real time. + * In adaptive mode, do not let QEMU_CLOCK_VIRTUAL run too far + * ahead of real time (it might already be ahead so careful not + * to go backwards). */ int64_t cur_icount = icount_get_locked(); int64_t delta = clock - cur_icount; + + if (delta < 0) { + delta = 0; + } warp_delta = MIN(warp_delta, delta); } qatomic_set_i64(&timers_state.qemu_icount_bias, From 78c4994e94477b2e438cc5b4fef2ea2a0599f7f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= Date: Fri, 2 Jun 2023 19:33:28 +0200 Subject: [PATCH 169/174] vdpa: mask _F_CTRL_GUEST_OFFLOADS for vhost vdpa devices MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit QEMU does not emulate it so it must be disabled as long as the backend does not support it. Signed-off-by: Eugenio Pérez Message-Id: <20230602173328.1917385-1-eperezma@redhat.com> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Acked-by: Jason Wang Tested-by: Lei Yang (cherry picked from commit 51e84244a7799172f4239482199e9b4bdcd23172) Signed-off-by: Michael Tokarev --- net/vhost-vdpa.c | 1 + 1 file changed, 1 insertion(+) diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c index acdf3cb96c..e533f8a348 100644 --- a/net/vhost-vdpa.c +++ b/net/vhost-vdpa.c @@ -49,6 +49,7 @@ const int vdpa_feature_bits[] = { VIRTIO_F_VERSION_1, VIRTIO_NET_F_CSUM, VIRTIO_NET_F_GUEST_CSUM, + VIRTIO_NET_F_CTRL_GUEST_OFFLOADS, VIRTIO_NET_F_GSO, VIRTIO_NET_F_GUEST_TSO4, VIRTIO_NET_F_GUEST_TSO6, From 4d8459c36596c881db28319044aef8145ef91819 Mon Sep 17 00:00:00 2001 From: Nicholas Piggin Date: Tue, 30 May 2023 23:12:12 +1000 Subject: [PATCH 170/174] target/ppc: Fix decrementer time underflow and infinite timer loop It is possible to store a very large value to the decrementer that it does not raise the decrementer exception so the timer is scheduled, but the next time value wraps and is treated as in the past. This can occur if (u64)-1 is stored on a zero-triggered exception, or (u64)-1 is stored twice on an underflow-triggered exception, for example. If such a value is set in DECAR, it gets stored to the decrementer by the timer function, which then immediately causes another timer, which hangs QEMU. Clamp the decrementer to the implemented width, and use that as the value for the timer calculation, effectively preventing this overflow. Reported-by: sdicaro@DDCI.com Signed-off-by: Nicholas Piggin Reviewed-by: Daniel Henrique Barboza Message-Id: <20230530131214.373524-1-npiggin@gmail.com> Signed-off-by: Daniel Henrique Barboza (cherry picked from commit 09d2db9f46e38e2da990df8ad914d735d764251a) Signed-off-by: Michael Tokarev --- hw/ppc/ppc.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hw/ppc/ppc.c b/hw/ppc/ppc.c index dc86c1c7db..fbdc48911e 100644 --- a/hw/ppc/ppc.c +++ b/hw/ppc/ppc.c @@ -806,6 +806,8 @@ static void __cpu_ppc_store_decr(PowerPCCPU *cpu, uint64_t *nextp, int64_t signed_decr; /* Truncate value to decr_width and sign extend for simplicity */ + value = extract64(value, 0, nr_bits); + decr = extract64(decr, 0, nr_bits); signed_value = sextract64(value, 0, nr_bits); signed_decr = sextract64(decr, 0, nr_bits); From c7b6b705efe583964ceacb1fba66a0d06cba8325 Mon Sep 17 00:00:00 2001 From: Zhenzhong Duan Date: Thu, 29 Jun 2023 16:40:38 +0800 Subject: [PATCH 171/174] vfio/pci: Fix a segfault in vfio_realize MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The kvm irqchip notifier is only registered if the device supports INTx, however it's unconditionally removed in vfio realize error path. If the assigned device does not support INTx, this will cause QEMU to crash when vfio realize fails. Change it to conditionally remove the notifier only if the notify hook is setup. Before fix: (qemu) device_add vfio-pci,host=81:11.1,id=vfio1,bus=root1,xres=1 Connection closed by foreign host. After fix: (qemu) device_add vfio-pci,host=81:11.1,id=vfio1,bus=root1,xres=1 Error: vfio 0000:81:11.1: xres and yres properties require display=on (qemu) Fixes: c5478fea27ac ("vfio/pci: Respond to KVM irqchip change notifier") Signed-off-by: Zhenzhong Duan Reviewed-by: Cédric Le Goater Reviewed-by: Joao Martins Signed-off-by: Cédric Le Goater (cherry picked from commit 357bd7932a136613d700ee8bc83e9165f059d1f7) Signed-off-by: Michael Tokarev --- hw/vfio/pci.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 939dcc3d4a..63eda94af7 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -3159,7 +3159,9 @@ static void vfio_realize(PCIDevice *pdev, Error **errp) out_deregister: pci_device_set_intx_routing_notifier(&vdev->pdev, NULL); - kvm_irqchip_remove_change_notifier(&vdev->irqchip_change_notifier); + if (vdev->irqchip_change_notifier.notify) { + kvm_irqchip_remove_change_notifier(&vdev->irqchip_change_notifier); + } out_teardown: vfio_teardown_msi(vdev); vfio_bars_exit(vdev); From 3b1b9aa4d53678c9f96067fb60f94ab28bb15d75 Mon Sep 17 00:00:00 2001 From: Shameer Kolothum Date: Tue, 13 Jun 2023 15:09:43 +0100 Subject: [PATCH 172/174] vfio/pci: Call vfio_prepare_kvm_msi_virq_batch() in MSI retry path MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When vfio_enable_vectors() returns with less than requested nr_vectors we retry with what kernel reported back. But the retry path doesn't call vfio_prepare_kvm_msi_virq_batch() and this results in, qemu-system-aarch64: vfio: Error: Failed to enable 4 MSI vectors, retry with 1 qemu-system-aarch64: ../hw/vfio/pci.c:602: vfio_commit_kvm_msi_virq_batch: Assertion `vdev->defer_kvm_irq_routing' failed Fixes: dc580d51f7dd ("vfio: defer to commit kvm irq routing when enable msi/msix") Reviewed-by: Longpeng Signed-off-by: Shameer Kolothum Reviewed-by: Cédric Le Goater Signed-off-by: Cédric Le Goater (cherry picked from commit c17408892319712c12357e5d1c6b305499c58c2a) Signed-off-by: Michael Tokarev --- hw/vfio/pci.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 63eda94af7..92a45de4c3 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -663,6 +663,8 @@ static void vfio_msi_enable(VFIOPCIDevice *vdev) vfio_disable_interrupts(vdev); + vdev->nr_vectors = msi_nr_vectors_allocated(&vdev->pdev); +retry: /* * Setting vector notifiers needs to enable route for each vector. * Deferring to commit the KVM routes once rather than per vector @@ -670,8 +672,6 @@ static void vfio_msi_enable(VFIOPCIDevice *vdev) */ vfio_prepare_kvm_msi_virq_batch(vdev); - vdev->nr_vectors = msi_nr_vectors_allocated(&vdev->pdev); -retry: vdev->msi_vectors = g_new0(VFIOMSIVector, vdev->nr_vectors); for (i = 0; i < vdev->nr_vectors; i++) { From 5cc60b67d32d4353e1fef74ba4f31f687094e24f Mon Sep 17 00:00:00 2001 From: Dongwon Kim Date: Wed, 21 Jun 2023 14:31:50 -0700 Subject: [PATCH 173/174] ui/gtk: set the area of the scanout texture correctly MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit x and y offsets and width and height of the scanout texture is not correctly configured in case guest scanout frame is dmabuf. Cc: Gerd Hoffmann Cc: Marc-André Lureau Cc: Vivek Kasireddy Signed-off-by: Dongwon Kim Message-ID: <20230621213150.29573-1-dongwon.kim@intel.com> (cherry picked from commit 37802a24eb4e535d96d6fe0273505d2b5c6528c2) Signed-off-by: Michael Tokarev --- ui/gtk-egl.c | 3 ++- ui/gtk-gl-area.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ui/gtk-egl.c b/ui/gtk-egl.c index 19130041bc..e99e3b0d8c 100644 --- a/ui/gtk-egl.c +++ b/ui/gtk-egl.c @@ -257,7 +257,8 @@ void gd_egl_scanout_dmabuf(DisplayChangeListener *dcl, gd_egl_scanout_texture(dcl, dmabuf->texture, dmabuf->y0_top, dmabuf->width, dmabuf->height, - 0, 0, dmabuf->width, dmabuf->height); + dmabuf->x, dmabuf->y, dmabuf->scanout_width, + dmabuf->scanout_height); if (dmabuf->allow_fences) { vc->gfx.guest_fb.dmabuf = dmabuf; diff --git a/ui/gtk-gl-area.c b/ui/gtk-gl-area.c index c384a1516b..1605818bd1 100644 --- a/ui/gtk-gl-area.c +++ b/ui/gtk-gl-area.c @@ -299,7 +299,8 @@ void gd_gl_area_scanout_dmabuf(DisplayChangeListener *dcl, gd_gl_area_scanout_texture(dcl, dmabuf->texture, dmabuf->y0_top, dmabuf->width, dmabuf->height, - 0, 0, dmabuf->width, dmabuf->height); + dmabuf->x, dmabuf->y, dmabuf->scanout_width, + dmabuf->scanout_height); if (dmabuf->allow_fences) { vc->gfx.guest_fb.dmabuf = dmabuf; From 681858ea14242d3b509b77e0179f7f63c99032bb Mon Sep 17 00:00:00 2001 From: Michael Tokarev Date: Sun, 9 Jul 2023 00:33:17 +0300 Subject: [PATCH 174/174] Update version for 7.2.4 release Signed-off-by: Michael Tokarev --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 429dc57af3..2bbaead448 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -7.2.3 +7.2.4

Tv|dEj+< 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�Q(n`eL48ogtbSfu{@R1Q51~c85J`>gV{1kKx@y#(spJ5@7);8^z9M^P1sZ z$V1=-eq^Q5JCBF0gbg%%*rW6U?>=H@2`43ToQE5PZzOVo6C&`R{f9)pAVTxyl#vK1 zIq;s-T_SgQpbO=UP0$RVa}M3chw~lw1Zh4@P|hN{Lk{=k89uZsX9MA7iPYlZ7~v4B zO66)5X^nPKmKL_$)Yp{IjMxw0w%icX(Y72GosDumdH9vU@hhWT8#JsWL6-W;HQ@o; zBjTh|vYcCvmK;%+kRo5ZY4lkb1P=ul`CPt0S}(}i8KFd`<+!V~QNBdNc9{CJ zyj3*fP@oab2~CCU4#>(Zb;N^&Zi1+mmP-8F)Q>97qTb#n$_d~CLE8!FQiW6+7)7ee z%0p{3;q_wV2^R9}HEm?ky8To`&A&z4_9s(@T2iX?qp42{W%Q+487JMJaq|5cC##Hf zMp4hnRDm&D8Ebu7NgByL5$ljxF}SO&t6X4+sn3WM;|om8On_|4giUQugoebjOs0G8 zkk(CegM|^-XDcgAWNQVaB^^0KVZB%dtOqP>`i+>>?d>&f+dHNnuej%XC$G~hl?5sn zw?@~W4VZeOXu}hkauboMSEgS-c2>(AH#D1A6^7Gtaq(ginB3`p21(yQ@%yaW)K-L(}SDgQSr)dp*;Kju&yx@=I4@@=3Nq%No^=KtcJ|b+CcVX;n zJ#3ESw1K?reRwZn2QVD@arFe7_(j4QU?}7G3bNcp9Fz2L5wL;#%<Y-cDk+)x_%+|^$1%KtpPHuHG=IUp2)Q0SU?9OifQchn>3&=L4T233@ z(8S{c#lIb;YR$DY60gj~B_(p2@qVa6)o8gRE~i;_5i)${4asQ+&*~X*G;3y88~)QN zK#3sOCMO;H5E4f^jjUxfrkmt6m%`P3?XRuQ4vUZizK9t+DPJRkLY~_nBLXKvXC8J2 zwb|P7D>wwJ3}Y&)F(pEQ;~A$XcS}eIX={`ZS)XvOCAo@?Ki^k|<7cakE(w&eC);tEGAebm%ec(i zL8u;%%XRP7V@ranhvVb>%lP>IGCsM#j8CjG!V_JoEfTUFeWi@NnDH8qaXe17x1#V= z7Ma$`ptFF07S27A?Pw_2I}~<98WVZUNOZ+lIiBsPB`G&!#`EPKBKQYN1ZVpYp;VVvGZ=lY(pxjcD!U8 zpQ!eZ90`q2R0jrSZqIDvQzZkrw}0)XY~vA%N*ouHI|;N$Qt)THlkM@xi8Qv0+S@YQ z7*oS;@-m%+dKK40J*s6Joyl2QvzU}#!E^R-w8`jPTXMz-^PTCvT1L!7^vdYm1{^2U z_pQh_chzY_-jUt2^}C_GOI2R|E>^y>9C*w&bR`(Mhc&7}w*FNJ@oNk5D^*Bv zh2Pa6a5h{2lv-9PVI_TQMS~ z44}5MlcMYdXv^

mA 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 diff --git a/roms/seabios-hppa b/roms/seabios-hppa index 458626c4c6..1cfbe76ff6 160000 --- a/roms/seabios-hppa +++ b/roms/seabios-hppa @@ -1 +1 @@ -Subproject commit 458626c4c6441045c0612f24313c7cf1f95e71c6 +Subproject commit 1cfbe76ff625fce9ed5991f7e13d80ffec900f40 From b3a003c8907630e493e47d27e330059b43538c5a Mon Sep 17 00:00:00 2001 From: Helge Deller Date: Sat, 24 Jun 2023 11:45:52 +0200 Subject: [PATCH 163/174] target/hppa: Update to SeaBIOS-hppa version 8 Update SeaBIOS-hppa to version 8. Fixes: - boot of HP-UX with SMP, and - reboot of Linux and HP-UX with SMP Enhancements: - show qemu version in boot menu - adds exit menu entry in boot menu to quit emulation - allow to trace PCD_CHASSIS codes & machine run status Signed-off-by: Helge Deller (cherry picked from commit 34ec3aea54368a92b62a55c656335885ba8c65ef) Signed-off-by: Michael Tokarev --- pc-bios/hppa-firmware.img | Bin 719376 -> 720216 bytes roms/seabios-hppa | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/pc-bios/hppa-firmware.img b/pc-bios/hppa-firmware.img index e7660b0458b78b101c7ed2dc17595e94438ffeb8..0fa3808f163ea60766272188a634d9296f2b5be4 100644 GIT binary patch delta 356358 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%0DfVbJAcdm$Zdy@RS`RP{y8 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 z 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