libvhost-user has no support for legacy virtio devices therefore let's fence them.
Signed-off-by: Marc Hartmayer <mhart...@linux.ibm.com> --- contrib/libvhost-user/libvhost-access.h | 10 ++++++++++ contrib/libvhost-user/libvhost-user.c | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/contrib/libvhost-user/libvhost-access.h b/contrib/libvhost-user/libvhost-access.h index 868ba3e7bfb8..aa505ea1ec02 100644 --- a/contrib/libvhost-user/libvhost-access.h +++ b/contrib/libvhost-user/libvhost-access.h @@ -1,11 +1,21 @@ #ifndef LIBVHOST_ACCESS_H +#include <assert.h> + #include "qemu/bswap.h" #include "libvhost-user.h" +static inline bool vu_has_feature(VuDev *dev, unsigned int fbit); + static inline bool vu_access_is_big_endian(VuDev *dev) { + /* + * TODO: can probably be removed as the fencing is already done in + * `vu_set_features_exec` + */ + assert(vu_has_feature(dev, VIRTIO_F_VERSION_1)); + /* Devices conforming to VIRTIO 1.0 or later are always LE. */ return false; } diff --git a/contrib/libvhost-user/libvhost-user.c b/contrib/libvhost-user/libvhost-user.c index 0214b04c5291..93c4503b1f53 100644 --- a/contrib/libvhost-user/libvhost-user.c +++ b/contrib/libvhost-user/libvhost-user.c @@ -540,6 +540,12 @@ vu_set_features_exec(VuDev *dev, VhostUserMsg *vmsg) DPRINT("u64: 0x%016"PRIx64"\n", vmsg->payload.u64); dev->features = vmsg->payload.u64; + if (!vu_has_feature(dev, VIRTIO_F_VERSION_1)) { + /* We only support devices conforming to VIRTIO 1.0 or + * later */ + vu_panic(dev, "virtio legacy devices aren't supported by libvhost-user"); + return false; + } if (!(dev->features & VHOST_USER_F_PROTOCOL_FEATURES)) { vu_set_enable_all_rings(dev, true); -- 2.25.4