qemu/tests/qtest
Daniel Henrique Barboza 3283843a8e libqos/virtio.c: fix 'avail_event' offset in qvring_init()
In qvring_init() we're writing vq->used->avail_event at "vq->used + 2 +
array_size".  The struct pointed by vq->used is, from virtio_ring.h
Linux header):

 *	// A ring of used descriptor heads with free-running index.
 *	__virtio16 used_flags;
 *	__virtio16 used_idx;
 *	struct vring_used_elem used[num];
 *	__virtio16 avail_event_idx;

So 'flags' is the word right at vq->used. 'idx' is vq->used + 2. We need
to skip 'used_idx' by adding + 2 bytes, and then sum the vector size, to
reach avail_event_idx. An example on how to properly access this field
can be found in qvirtqueue_kick():

avail_event = qvirtio_readw(d, qts, vq->used + 4 +
                            sizeof(struct vring_used_elem) * vq->size);

This error was detected when enabling the RISC-V 'virt' libqos machine.
The 'idx' test from vhost-user-blk-test.c errors out with a timeout in
qvirtio_wait_used_elem(). The timeout happens because when processing
the first element, 'avail_event' is read in qvirtqueue_kick() as non-zero
because we didn't initialize it properly (and the memory at that point
happened to be non-zero). 'idx' is 0.

All of this makes this condition fail because "idx - avail_event" will
overflow and be non-zero:

/* < 1 because we add elements to avail queue one by one */
if ((flags & VRING_USED_F_NO_NOTIFY) == 0 &&
                        (!vq->event || (uint16_t)(idx-avail_event) < 1)) {
    d->bus->virtqueue_kick(d, vq);
}

As a result the virtqueue is never kicked and we'll timeout waiting for it.

Fixes: 1053587c3f ("libqos: Added EVENT_IDX support")
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-3-dbarboza@ventanamicro.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
2024-03-01 08:27:33 +01:00
..
fuzz fuzz: Correct invalid mentions of 'softmmu' by 'system' 2023-10-07 19:02:33 +02:00
libqos libqos/virtio.c: fix 'avail_event' offset in qvring_init() 2024-03-01 08:27:33 +01:00
ac97-test.c tests/qtest/ac97-test: add up-/downsampling tests 2023-05-26 09:10:49 +02:00
acpi-utils.c
acpi-utils.h
adm1266-test.c tests/qtest: add tests for ADM1266 2023-11-07 13:08:49 +01:00
adm1272-test.c
ahci-test.c tests/qtest: ahci-test: add test exposing reset issue with pending callback 2023-11-07 13:08:48 +01:00
am53c974-test.c
arm-cpu-features.c target/arm: Implement FEAT_PACQARMA3 2023-09-08 12:50:44 +01:00
aspeed_fsi-test.c hw/fsi: Added qtest 2024-02-01 08:33:18 +01:00
aspeed_gpio-test.c hw/gpio/aspeed: Don't let guests modify input pins 2022-07-14 16:24:38 +02:00
aspeed_hace-test.c
aspeed_smc-test.c tests/qtest: aspeed_smc-test: Avoid using hardcoded /tmp 2022-09-27 20:51:20 +02:00
bcm2835-dma-test.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
bios-tables-test-allowed-diff.h tests/qtest/bios-tables-tests: Update virt golden reference 2024-02-15 11:31:52 +00:00
bios-tables-test.c tests: bios-tables-test: Rename smbios type 4 related test functions 2023-12-25 11:34:55 -05:00
boot-order-test.c tests/qtest: replace qmp_discard_response with qtest_qmp_assert_success 2023-05-16 09:14:18 +02:00
boot-sector.c tests: boot_sector_test(): make it multi-shot 2023-01-28 06:21:29 -05:00
boot-sector.h
boot-serial-test.c tests/qtest: Fix boot-serial-test when using --without-default-devices 2024-02-23 08:13:52 +01:00
cdrom-test.c tests/cdrom-test: Add cdrom test for LoongArch virt machine 2024-02-23 08:13:52 +01:00
cmsdk-apb-dualtimer-test.c
cmsdk-apb-timer-test.c
cmsdk-apb-watchdog-test.c
cpu-plug-test.c
cxl-test.c tests/qtest/cxl-test: Clean up temporary directories after testing 2023-06-26 09:01:33 +02:00
dbus-display-test.c tests: skip dbus-display tests that need a console 2024-02-23 08:13:52 +01:00
dbus-vmstate-test.c tests/qtest: Use EXIT_FAILURE instead of magic number 2022-10-28 14:31:49 +02:00
device-introspect-test.c
device-plug-test.c target/ppc: Add POWER9 DD2.2 model 2023-05-28 13:25:11 -03:00
display-vga-test.c tests/qtest/display-vga-test: Add proper checks if a device is available 2023-01-31 09:05:26 +01:00
drive_del-test.c tests/qtest: drive_del-test: Skip tests that require missing devices 2023-02-14 09:11:27 +01:00
ds1338-test.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
e1000-test.c tests: Fix error strings 2022-09-20 11:23:02 +02:00
e1000e-test.c tests/qtest/e1000e-test: Fabricate ethernet header 2023-03-10 17:26:47 +08:00
eepro100-test.c
emc141x-test.c
endianness-test.c
erst-test.c tests: add G_GNUC_PRINTF for various functions 2023-01-11 10:44:34 +01:00
es1370-test.c tests/qtest: Specify audiodev= and -audiodev 2023-09-22 16:30:08 +02:00
fdc-test.c tests/qtest: replace qmp_discard_response with qtest_qmp_assert_success 2023-05-16 09:14:18 +02:00
fuzz-e1000e-test.c
fuzz-lsi53c895a-test.c hw/scsi/lsi53c895a: Fix reentrancy issues in the LSI controller (CVE-2023-0330) 2023-05-26 09:37:04 +02:00
fuzz-megasas-test.c qtest: "-display none" is set in qtest_init() 2022-10-11 12:36:15 +02:00
fuzz-sb16-test.c qtest: "-display none" is set in qtest_init() 2022-10-11 12:36:15 +02:00
fuzz-sdcard-test.c qtest: "-display none" is set in qtest_init() 2022-10-11 12:36:15 +02:00
fuzz-virtio-scsi-test.c qtest: "-display none" is set in qtest_init() 2022-10-11 12:36:15 +02:00
fuzz-xlnx-dp-test.c qtest: "-display none" is set in qtest_init() 2022-10-11 12:36:15 +02:00
fw_cfg-test.c
hd-geo-test.c tests/qtest/hd-geo-test: fix incorrect pcie-root-port usage and simplify test 2023-07-10 18:59:32 -04:00
hexloader-test.c cleanup: Tweak and re-run return_directly.cocci 2022-12-14 16:19:35 +01:00
i440fx-test.c tests/qtest: i440fx-test: Rewrite create_blob_file() to be portable 2022-09-27 20:51:20 +02:00
i82801b11-test.c
ide-test.c tests/qtest: replace qmp_discard_response with qtest_qmp_assert_success 2023-05-16 09:14:18 +02:00
igb-test.c igb: Introduce qtest for igb device 2023-03-10 17:26:47 +08:00
intel-hda-test.c tests/qtest: Specify audiodev= and -audiodev 2023-09-22 16:30:08 +02:00
ioh3420-test.c
ipmi-bt-test.c ipmi-bt-test: force ipv4 2023-10-27 10:13:17 +02:00
ipmi-kcs-test.c
ipoctal232-test.c
isl_pmbus_vr-test.c
ivshmem-test.c tests: add G_GNUC_PRINTF for various functions 2023-01-11 10:44:34 +01:00
libqmp.c tests: add G_GNUC_PRINTF for various functions 2023-01-11 10:44:34 +01:00
libqmp.h
libqtest-single.h tests/qtest: libqtest: Adapt global_qtest declaration for win32 2022-09-27 20:51:21 +02:00
libqtest.c tests/qtest: Don't print messages from query instances 2023-10-20 08:51:41 +02:00
libqtest.h tests/qtest: Introduce qtest_resolve_machine_alias 2023-10-20 08:51:41 +02:00
lpc-ich9-test.c
lsm303dlhc-mag-test.c
m48t59-test.c m48t59-test: avoid possible overflow on ABS 2023-09-26 16:39:29 +02:00
machine-none-test.c tests/qtest: machine-none-test: Use double quotes to pass the cpu option 2022-08-29 15:28:51 +02:00
max34451-test.c hw/i2c: pmbus: reset page register for out of range reads 2023-11-07 13:08:49 +01:00
megasas-test.c
meson.build ppc/pnv: Test pnv i2c master and connected devices 2024-02-23 23:24:42 +10:00
microbit-test.c microbit: add missing qtest_quit() call 2023-09-20 15:06:33 +01:00
migration-helpers.c tests/qtest/migration: Add a wrapper to print test names 2024-01-16 11:16:09 +08:00
migration-helpers.h tests/qtest/migration: Add a wrapper to print test names 2024-01-16 11:16:09 +08:00
migration-test.c tests/qtest/migration: Add a fd + file test 2024-02-28 11:31:28 +08:00
modules-test.c blkio: add libblkio block driver 2022-10-26 14:56:42 -04:00
ne2000-test.c
netdev-socket.c qtest: ensure netdev-socket tests have non-overlapping names 2024-01-11 11:39:26 +01:00
npcm7xx_adc-test.c tests/npcm7xx_adc: Clean up global variable shadowing 2023-10-27 09:39:08 +02:00
npcm7xx_emc-test.c tests/qtest/npcm7xx_emc-test: Connect all NICs to a backend 2024-02-15 11:36:23 +00:00
npcm7xx_gpio-test.c
npcm7xx_pwm-test.c tests/qtest/npcm7xx_pwm-test: Only do full testing in slow mode 2023-12-20 10:29:23 +01:00
npcm7xx_rng-test.c
npcm7xx_sdhci-test.c
npcm7xx_smbus-test.c
npcm7xx_timer-test.c tests/qtest: Fix npcm7xx_timer-test.c flaky test 2023-10-12 14:11:44 +02:00
npcm7xx_watchdog_timer-test.c tests/qtest/npcm7xx_watchdog_timer: Only test the corner cases by default 2024-01-16 07:24:08 +01:00
npcm_gmac-test.c tests/qtest: Fix GMAC test to run on a machine in upstream QEMU 2024-02-15 11:44:07 +00:00
numa-test.c hw/i386/pc: improve physical address space bound check for 32-bit x86 systems 2023-10-04 18:15:06 -04:00
nvme-test.c
pca9552-test.c misc/pca9552: Fix inverted input status 2024-02-23 23:24:42 +10:00
pci-test.c
pcnet-test.c
pflash-cfi02-test.c tests/qtest/pflash: Clean up local variable shadowing 2023-09-12 12:07:31 +02:00
pnv-host-i2c-test.c ppc/pnv: Test pnv i2c master and connected devices 2024-02-23 23:24:42 +10:00
pnv-xscom-test.c ppc/pnv: Test pnv i2c master and connected devices 2024-02-23 23:24:42 +10:00
pnv-xscom.h ppc/pnv: Test pnv i2c master and connected devices 2024-02-23 23:24:42 +10:00
prom-env-test.c tests/qtest: prom-env-test: Use double quotes to pass the prom-env option 2022-08-29 15:28:51 +02:00
pvpanic-pci-test.c cleanup: Tweak and re-run return_directly.cocci 2022-12-14 16:19:35 +01:00
pvpanic-test.c cleanup: Tweak and re-run return_directly.cocci 2022-12-14 16:19:35 +01:00
pxe-test.c tests/qtest: Fix tests when no KVM or TCG are present 2023-05-02 10:54:32 +01:00
q35-test.c
qmp-cmd-test.c qapi: Add HV_BALLOON_STATUS_REPORT event and its QMP query command 2023-11-06 14:08:10 +01:00
qmp-test.c tests/qtest: qmp-test: Avoid using hardcoded /tmp 2022-09-27 20:51:21 +02:00
qom-test.c tests/qtest/qom-test: Stop spamming the test log 2023-01-26 13:25:07 +01:00
qos-test.c tests/qtest: use qos_printf instead of g_test_message 2022-10-07 09:41:51 -04:00
qtest_aspeed.c qtest: Add functions for accessing devices on Aspeed I2C controller 2023-04-20 11:25:32 +02:00
qtest_aspeed.h aspeed: Clean up includes 2024-01-30 21:20:20 +03:00
readconfig-test.c tests/qtest/readconfig: Test the docs/config/q35-*.cfg files 2023-07-10 15:34:57 +02:00
rtas-test.c tests: add G_GNUC_PRINTF for various functions 2023-01-11 10:44:34 +01:00
rtc-test.c tests/qtest: Adapt {m48t59,rtc}-test cases for win32 2022-08-25 15:24:09 +02:00
rtl8139-test.c tests/rtl8139: Clean up global variable shadowing 2023-10-27 09:39:08 +02:00
sdhci-test.c
sifive-e-aon-watchdog-test.c tests/qtest: sifive-e-aon-watchdog-test.c: Add QTest of watchdog of sifive_e 2023-07-10 22:29:15 +10:00
spapr-phb-test.c
sse-timer-test.c
stm32l4x5_exti-test.c tests/qtest: Check that EXTI fan-in irqs are correctly connected 2024-02-27 13:01:41 +00:00
stm32l4x5_syscfg-test.c tests/qtest: Add STM32L4x5 SYSCFG QTest testcase 2024-01-15 17:12:23 +00:00
tco-test.c hw: Move ich9.h to southbridge/ 2023-02-27 22:29:01 +01:00
test-arm-mptimer.c
test-filter-mirror.c tests/qtest: check the return value 2023-12-04 15:12:57 +01:00
test-filter-redirector.c tests/qtest: check the return value 2023-12-04 15:12:57 +01:00
test-hmp.c hmp: Remove deprecated 'singlestep' command 2024-01-19 11:38:32 +01:00
test-netfilter.c
test-x86-cpuid-compat.c pc_piix: remove pc-i440fx-1.4 up to pc-i440fx-1.7 2023-09-25 18:25:02 +02:00
tmp105-test.c
tpm-crb-swtpm-test.c qtest: Move tpm_util_tis_transmit() into tpm-tis-utils.c and rename it 2023-04-20 11:25:32 +02:00
tpm-crb-test.c qtest: Move tpm_util_tis_transmit() into tpm-tis-utils.c and rename it 2023-04-20 11:25:32 +02:00
tpm-emu.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
tpm-emu.h
tpm-tests.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
tpm-tests.h tests/: spelling fixes 2023-09-08 13:08:52 +03:00
tpm-tis-device-swtpm-test.c qtest: Move tpm_util_tis_transmit() into tpm-tis-utils.c and rename it 2023-04-20 11:25:32 +02:00
tpm-tis-device-test.c
tpm-tis-i2c-test.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
tpm-tis-swtpm-test.c qtest: Move tpm_util_tis_transmit() into tpm-tis-utils.c and rename it 2023-04-20 11:25:32 +02:00
tpm-tis-test.c
tpm-tis-util.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
tpm-tis-util.h qtest: Move tpm_util_tis_transmit() into tpm-tis-utils.c and rename it 2023-04-20 11:25:32 +02:00
tpm-util.c qtest: Move tpm_util_tis_transmit() into tpm-tis-utils.c and rename it 2023-04-20 11:25:32 +02:00
tpm-util.h qtest: Move tpm_util_tis_transmit() into tpm-tis-utils.c and rename it 2023-04-20 11:25:32 +02:00
tulip-test.c
ufs-test.c tests/qtest/ufs-test.c: spelling fix: tranfer 2023-11-15 12:06:05 +03:00
usb-hcd-ehci-test.c tests/qtest/usb-hcd-ehci-test: Check for EHCI and UHCI HCDs before using them 2023-05-26 09:10:49 +02:00
usb-hcd-ohci-test.c
usb-hcd-uhci-test.c tests/qtest/usb-hcd: Remove the empty "init" tests 2023-09-08 13:08:52 +03:00
usb-hcd-xhci-test.c tests/qtest/usb-hcd: Remove the empty "init" tests 2023-09-08 13:08:52 +03:00
vhost-user-blk-test.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
vhost-user-test.c tests/qtest: enable tests for virtio-scmi 2023-07-10 16:17:08 -04:00
virtio-9p-test.c tests/9p: merge v9fs_tunlinkat() and do_unlinkat() 2022-10-24 12:24:32 +02:00
virtio-blk-test.c tests/qtest: replace qmp_discard_response with qtest_qmp_assert_success 2023-05-16 09:14:18 +02:00
virtio-ccw-test.c tests/qtest/virtio-ccw: Fix device presence checking 2024-01-11 11:39:26 +01:00
virtio-iommu-test.c
virtio-net-failover.c qtest: use correct boolean type for failover property 2024-01-11 11:39:26 +01:00
virtio-net-test.c tests/qtest: check the return value 2023-12-04 15:12:57 +01:00
virtio-rng-test.c
virtio-scsi-test.c tests/virtio-scsi: Clean up global variable shadowing 2023-10-27 09:39:08 +02:00
virtio-serial-test.c
virtio-test.c
vmgenid-test.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
vmxnet3-test.c
vnc-display-test.c qtest: enable vnc-display test on win32 2023-03-13 15:41:32 +04:00
wdt_ib700-test.c
xlnx-can-test.c
xlnx-canfd-test.c tests/qtest: xlnx-canfd-test: Fix code coverity issues 2023-07-06 13:26:43 +01:00
xlnx-versal-trng-test.c tests/qtest/xlnx-versal-trng-test.c: Drop use of variable length array 2024-02-02 13:51:58 +00:00