[PATCH 0/3] tools/virtio: exercise VHOST_*_FEATURES_ARRAY ioctls
"rom.wang" <[email protected]> Tue, 4 Aug 2026 16:01:22 +0800
| Newsgroups | org.kernel.vger.kvm,dev.linux.lists.virtualization,org.kernel.vger.linux-kernel,org.kernel.vger.netdev |
|---|---|
| Message-ID | <[email protected]> |
From: Yufeng Wang <[email protected]> Hi Eugenio, This series follows up on your review of the vhost/net GET_FEATURES_ARRAY fix [1], where you asked for a switch in tools/virtio/vhost_net_test.c to exercise VHOST_GET_FEATURES_ARRAY and VHOST_SET_FEATURES_ARRAY. The fix itself is unchanged from the v2 you Acked [2] and is not included here. Patch 3 adds the requested "--features-array" switch. When it is given, the test programs features via VHOST_SET_FEATURES_ARRAY and then verifies VHOST_GET_FEATURES_ARRAY by issuing it twice with the same count, comfortably above VIRTIO_FEATURES_U64S: once into a zero-initialized buffer and once into a buffer pre-filled with a non-zero sentinel. The two reads must match on every entry: the kernel fills the prefix with the device features and clear_user()s the trailing entries it did not fill. A clear_user() with the wrong start address clobbers the prefix instead of the tail; the sentinel buffer then keeps non-zero data in the trailing entries and disagrees with the clean read. Using a count comfortably above VIRTIO_FEATURES_U64S (rather than matching it exactly) keeps the test correct as the kernel's feature-word count grows, so this is exactly the path that [1] fixes and the test doubles as a regression test for it. Patches 1-2 are build prerequisites needed for the harness to compile against current headers: a device-id compat header (since mod_devicetable.h was split into include/linux/device-id/) and an __must_be_array stub (needed by struct_size(), which the new test uses). With them, `make -C tools/virtio test` builds virtio_test, vringh_test and vhost_net_test cleanly. Patch 3 depends on [1] for its GET path to pass. Tested on x86_64: - without [1]: ./vhost_net_test --features-array aborts in verify_get_features_array() (the GET clear_user bug); - with [1]: both ./vhost_net_test and ./vhost_net_test --features-array complete RX/TX with started == completed == 0x100000. [1] https://lore.kernel.org/all/[email protected]/ [2] https://lore.kernel.org/all/CAJaqyWfP7j5_PvOP0JiHuAQ8appGnoJDS3OB-qK7riBpZ_d_tQ@mail.gmail.com/ Yufeng Wang (3): tools/virtio: add device-id compat header for virtio tools/virtio: add __must_be_array stub tools/virtio: add --features-array switch tools/virtio/linux/compiler.h | 1 + tools/virtio/linux/device-id/virtio.h | 1 + tools/virtio/vhost_net_test.c | 70 +++++++++++++++++++++++++-- 3 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 tools/virtio/linux/device-id/virtio.h -- 2.34.1 No virus found Checked by Hillstone Network AntiVirus