lkml.org 
[lkml]   [2018]   [Jun]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 28/41] vhost: synchronize IOTLB message with dev cleanup
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Jason Wang <jasowang@redhat.com>

    [ Upstream commit 1b15ad683ab42a203f98b67045b40720e99d0e9a ]

    DaeRyong Jeong reports a race between vhost_dev_cleanup() and
    vhost_process_iotlb_msg():

    Thread interleaving:
    CPU0 (vhost_process_iotlb_msg) CPU1 (vhost_dev_cleanup)
    (In the case of both VHOST_IOTLB_UPDATE and
    VHOST_IOTLB_INVALIDATE)

    ===== =====
    vhost_umem_clean(dev->iotlb);
    if (!dev->iotlb) {
    ret = -EFAULT;
    break;
    }
    dev->iotlb = NULL;

    The reason is we don't synchronize between them, fixing by protecting
    vhost_process_iotlb_msg() with dev mutex.

    Reported-by: DaeRyong Jeong <threeearcat@gmail.com>
    Fixes: 6b1e6cc7855b0 ("vhost: new device IOTLB API")
    Signed-off-by: Jason Wang <jasowang@redhat.com>
    Acked-by: Michael S. Tsirkin <mst@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/vhost/vhost.c | 3 +++
    1 file changed, 3 insertions(+)

    --- a/drivers/vhost/vhost.c
    +++ b/drivers/vhost/vhost.c
    @@ -993,6 +993,7 @@ static int vhost_process_iotlb_msg(struc
    {
    int ret = 0;

    + mutex_lock(&dev->mutex);
    vhost_dev_lock_vqs(dev);
    switch (msg->type) {
    case VHOST_IOTLB_UPDATE:
    @@ -1024,6 +1025,8 @@ static int vhost_process_iotlb_msg(struc
    }

    vhost_dev_unlock_vqs(dev);
    + mutex_unlock(&dev->mutex);
    +
    return ret;
    }
    ssize_t vhost_chr_write_iter(struct vhost_dev *dev,

    \
     
     \ /
      Last update: 2018-06-09 17:36    [W:4.154 / U:0.304 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site