qemu-e2k/tests/qtest/libqos
Daniel Henrique Barboza 2791490de1 libqos/virtio.c: init all elems in qvring_indirect_desc_setup()
The loop isn't setting the values for the last element. Every other
element is being initialized with addr = 0, flags = VRING_DESC_F_NEXT
and next = i + 1. The last elem is never touched.

This became a problem when enabling a RISC-V 'virt' libqos machine in
the 'indirect' test of virti-blk-test.c. The 'flags' for the last
element will end up being an odd number (since we didn't touch it).
Being an odd number it will be mistaken by VRING_DESC_F_NEXT, which
happens to be 1.

Deep into hw/virt/virtio.c, in virtqueue_split_pop(), into
virtqueue_split_read_next_desc(), a check for VRING_DESC_F_NEXT will be
made to see if we're supposed to chain. The code will keep up chaining
in the last element because the uninitialized value happens to be odd.
We'll error out right after that because desc->next (which is also
uninitialized) will be >= max. A VIRTQUEUE_READ_DESC_ERROR will be
returned, with an error message like this in the stderr:

qemu-system-riscv64: Desc next is 49391

Since we never returned, we'll end up timing out at qvirtio_wait_used_elem():

ERROR:../tests/qtest/libqos/virtio.c:236:qvirtio_wait_used_elem:
    assertion failed: (g_get_monotonic_time() - start_time <= timeout_us)

The root cause is using uninitialized values from guest_alloc() in
qvring_indirect_desc_setup(). There's no guarantee that the memory pages
retrieved will be zeroed, so we can't make assumptions. In fact, commit
5b4f72f5e8 ("tests/qtest: properly initialise the vring used idx") fixed a
similar problem stating "It is probably not wise to assume guest memory
is zeroed anyway". I concur.

Initialize all elems in qvring_indirect_desc_setup().

Fixes: f294b029aa ("libqos: Added indirect descriptor support to virtio implementation")
Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Message-ID: <20240217192607.32565-2-dbarboza@ventanamicro.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
2024-03-01 08:27:33 +01:00
..
aarch64-xlnx-zcu102-machine.c tests/qtest: libqos: Rename malloc.h to libqos-malloc.h 2022-08-29 15:28:51 +02:00
ahci.c hw/ide/ahci: PxCI should not get cleared when ERR_STAT is set 2023-09-06 22:48:04 -04:00
ahci.h hw/ide/ahci: PxCI should not get cleared when ERR_STAT is set 2023-09-06 22:48:04 -04:00
arm-imx25-pdk-machine.c tests/qtest: libqos: Rename malloc.h to libqos-malloc.h 2022-08-29 15:28:51 +02:00
arm-n800-machine.c tests/qtest: libqos: Rename malloc.h to libqos-malloc.h 2022-08-29 15:28:51 +02:00
arm-raspi2-machine.c tests/qtest: libqos: Rename malloc.h to libqos-malloc.h 2022-08-29 15:28:51 +02:00
arm-sabrelite-machine.c tests/qtest: libqos: Rename malloc.h to libqos-malloc.h 2022-08-29 15:28:51 +02:00
arm-smdkc210-machine.c tests/qtest: libqos: Rename malloc.h to libqos-malloc.h 2022-08-29 15:28:51 +02:00
arm-virt-machine.c tests/qtest: libqos: Rename malloc.h to libqos-malloc.h 2022-08-29 15:28:51 +02:00
arm-xilinx-zynq-a9-machine.c tests/qtest: libqos: Rename malloc.h to libqos-malloc.h 2022-08-29 15:28:51 +02:00
e1000e.c tests/qtest/libqos/e1000e: Export macreg functions 2023-03-10 17:26:47 +08:00
e1000e.h tests/qtest/libqos/e1000e: Export macreg functions 2023-03-10 17:26:47 +08:00
fw_cfg.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
fw_cfg.h tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
generic-pcihost.c tests/qtest/libqos: Add generic pci host bridge in arm-virt machine 2022-05-12 12:07:06 +02:00
generic-pcihost.h tests/qtest: libqos: Rename malloc.h to libqos-malloc.h 2022-08-29 15:28:51 +02:00
i2c-imx.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
i2c-omap.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
i2c.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
i2c.h tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
igb.c igb: RX payload guest writting refactoring 2023-09-18 14:36:13 +08:00
libqos-malloc.c tests/qtest: libqos: Rename malloc.h to libqos-malloc.h 2022-08-29 15:28:51 +02:00
libqos-malloc.h tests/qtest: libqos: Rename malloc.h to libqos-malloc.h 2022-08-29 15:28:51 +02:00
libqos-pc.c
libqos-pc.h tests: add G_GNUC_PRINTF for various functions 2023-01-11 10:44:34 +01:00
libqos-spapr.c
libqos-spapr.h tests: add G_GNUC_PRINTF for various functions 2023-01-11 10:44:34 +01:00
libqos.c tests/qtest: Move mkimg() and have_qemu_img() from libqos to libqtest 2023-07-10 15:34:57 +02:00
libqos.h tests/qtest: Move mkimg() and have_qemu_img() from libqos to libqtest 2023-07-10 15:34:57 +02:00
malloc-pc.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
malloc-pc.h tests/qtest: libqos: Rename malloc.h to libqos-malloc.h 2022-08-29 15:28:51 +02:00
malloc-spapr.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
malloc-spapr.h tests/qtest: libqos: Rename malloc.h to libqos-malloc.h 2022-08-29 15:28:51 +02:00
meson.build tests/qtest: enable tests for virtio-scmi 2023-07-10 16:17:08 -04:00
pci-pc.c tests/x86: add helper qtest_qmp_device_del_send() 2022-10-11 14:06:48 +02:00
pci-pc.h tests/qtest: libqos: Rename malloc.h to libqos-malloc.h 2022-08-29 15:28:51 +02:00
pci-spapr.c tests/qtest/libqos/pci: Introduce pio_limit 2022-05-12 12:07:06 +02:00
pci-spapr.h tests/qtest: libqos: Rename malloc.h to libqos-malloc.h 2022-08-29 15:28:51 +02:00
pci.c tests/qtest/libqos/pci: Introduce pio_limit 2022-05-12 12:07:06 +02:00
pci.h tests/qtest/libqos: Skip hotplug tests if pci root bus is not hotpluggable 2022-05-12 12:07:06 +02:00
ppc64_pseries-machine.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
qgraph_internal.h tests/: spelling fixes 2023-09-08 13:08:52 +03:00
qgraph.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
qgraph.h Fix several typos in documentation (found by codespell) 2022-11-11 09:39:25 +01:00
qos_external.c tests/qtest: libqos: Rename malloc.h to libqos-malloc.h 2022-08-29 15:28:51 +02:00
qos_external.h tests/qtest: libqos: Rename malloc.h to libqos-malloc.h 2022-08-29 15:28:51 +02:00
rtas.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
rtas.h tests/qtest: libqos: Rename malloc.h to libqos-malloc.h 2022-08-29 15:28:51 +02:00
sdhci-cmd.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
sdhci-cmd.h tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
sdhci.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
sdhci.h
tpci200.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
usb.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
usb.h
vhost-user-blk.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
vhost-user-blk.h test: new qTest case to test the vhost-user-blk-server 2021-05-18 12:57:38 +02:00
virtio-9p-client.c tests/9p: fix potential leak in v9fs_rreaddir() 2023-05-16 16:21:54 +02:00
virtio-9p-client.h tests/9p: merge v9fs_tunlinkat() and do_unlinkat() 2022-10-24 12:24:32 +02:00
virtio-9p.c tests: add G_GNUC_PRINTF for various functions 2023-01-11 10:44:34 +01:00
virtio-9p.h
virtio-balloon.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
virtio-balloon.h
virtio-blk.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
virtio-blk.h
virtio-gpio.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
virtio-gpio.h tests/qtest: enable tests for virtio-gpio 2022-10-07 09:41:51 -04:00
virtio-iommu.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
virtio-iommu.h tests: qtest: Add virtio-iommu test 2021-12-15 08:08:59 +01:00
virtio-mmio.c tests/qtest: libqos: Rename malloc.h to libqos-malloc.h 2022-08-29 15:28:51 +02:00
virtio-mmio.h
virtio-net.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
virtio-net.h
virtio-pci-modern.c
virtio-pci-modern.h
virtio-pci.c tests/qtest: libqos: Rename malloc.h to libqos-malloc.h 2022-08-29 15:28:51 +02:00
virtio-pci.h
virtio-rng.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
virtio-rng.h
virtio-scmi.c tests/qtest: enable tests for virtio-scmi 2023-07-10 16:17:08 -04:00
virtio-scmi.h tests/qtest: enable tests for virtio-scmi 2023-07-10 16:17:08 -04:00
virtio-scsi.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
virtio-scsi.h
virtio-serial.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
virtio-serial.h
virtio.c libqos/virtio.c: init all elems in qvring_indirect_desc_setup() 2024-03-01 08:27:33 +01:00
virtio.h tests/qtest: libqos: Rename malloc.h to libqos-malloc.h 2022-08-29 15:28:51 +02:00
x86_64_pc-machine.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00