Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

vhost: Fix vhost_vq_reset()

vhost_reset_is_le() is vhost_init_is_le(), and in the case of
cross-endian legacy, vhost_init_is_le() depends on vq->user_be.

vq->user_be is set by vhost_disable_cross_endian().

But in vhost_vq_reset(), we have:

vhost_reset_is_le(vq);
vhost_disable_cross_endian(vq);

And so user_be is used before being set.

To fix that, reverse the lines order as there is no other dependency
between them.

Signed-off-by: Laurent Vivier <lvivier@redhat.com>
Link: https://lore.kernel.org/r/20210312140913.788592-1-lvivier@redhat.com
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

authored by

Laurent Vivier and committed by
Michael S. Tsirkin
beb691e6 4c050286

+1 -1
+1 -1
drivers/vhost/vhost.c
··· 332 332 vq->error_ctx = NULL; 333 333 vq->kick = NULL; 334 334 vq->log_ctx = NULL; 335 - vhost_reset_is_le(vq); 336 335 vhost_disable_cross_endian(vq); 336 + vhost_reset_is_le(vq); 337 337 vq->busyloop_timeout = 0; 338 338 vq->umem = NULL; 339 339 vq->iotlb = NULL;