From: Jason Wang Date: Wed, 8 Aug 2018 03:43:04 +0000 (+0800) Subject: vhost: reset metadata cache when initializing new IOTLB X-Git-Tag: v4.19~500^2~5 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b13f9c6364373a1b9f71e9846dc4fb199296f926;p=platform%2Fkernel%2Flinux-rpi.git vhost: reset metadata cache when initializing new IOTLB We need to reset metadata cache during new IOTLB initialization, otherwise the stale pointers to previous IOTLB may be still accessed which will lead a use after free. Reported-by: syzbot+c51e6736a1bf614b3272@syzkaller.appspotmail.com Fixes: f88949138058 ("vhost: introduce O(1) vq metadata cache") Signed-off-by: Jason Wang Signed-off-by: David S. Miller --- diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c index a502f1a..ed31145 100644 --- a/drivers/vhost/vhost.c +++ b/drivers/vhost/vhost.c @@ -1560,9 +1560,12 @@ int vhost_init_device_iotlb(struct vhost_dev *d, bool enabled) d->iotlb = niotlb; for (i = 0; i < d->nvqs; ++i) { - mutex_lock(&d->vqs[i]->mutex); - d->vqs[i]->iotlb = niotlb; - mutex_unlock(&d->vqs[i]->mutex); + struct vhost_virtqueue *vq = d->vqs[i]; + + mutex_lock(&vq->mutex); + vq->iotlb = niotlb; + __vhost_vq_meta_reset(vq); + mutex_unlock(&vq->mutex); } vhost_umem_clean(oiotlb);