From: xiongweimin <[email protected]> The return value of ops->set_map() is currently ignored when handling VHOST_IOTLB_BATCH_END. If the backend fails to program the IOTLB, the VMM incorrectly believes the operation succeeded and may continue with stale or incorrect mappings.
Save and propagate the error from ops->set_map() in BATCH_END. Signed-off-by: xiongweimin <[email protected]> --- drivers/vhost/vdpa.c | 6 +++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c index bb96b1aa5..ffbb10a92 100644 --- a/drivers/vhost/vdpa.c +++ b/drivers/vhost/vdpa.c @@ -1297,8 +1297,10 @@ static int vhost_vdpa_process_iotlb_msg(struct vhost_dev *dev, u32 asid, v->in_batch = true; break; case VHOST_IOTLB_BATCH_END: - if (v->in_batch && ops->set_map) - ops->set_map(vdpa, asid, iotlb); + if (v->in_batch && ops->set_map) { + r = ops->set_map(vdpa, asid, iotlb); + break; + } v->in_batch = false; break; default: -- 2.39.3
