| From foo@baz Wed Apr 11 10:26:56 CEST 2018 |
| From: Jason Wang <jasowang@redhat.com> |
| Date: Mon, 26 Mar 2018 16:10:23 +0800 |
| Subject: vhost_net: add missing lock nesting notation |
| |
| From: Jason Wang <jasowang@redhat.com> |
| |
| |
| [ Upstream commit aaa3149bbee9ba9b4e6f0bd6e3e7d191edeae942 ] |
| |
| We try to hold TX virtqueue mutex in vhost_net_rx_peek_head_len() |
| after RX virtqueue mutex is held in handle_rx(). This requires an |
| appropriate lock nesting notation to calm down deadlock detector. |
| |
| Fixes: 0308813724606 ("vhost_net: basic polling support") |
| Reported-by: syzbot+7f073540b1384a614e09@syzkaller.appspotmail.com |
| 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/net.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/vhost/net.c |
| +++ b/drivers/vhost/net.c |
| @@ -524,7 +524,7 @@ static int vhost_net_rx_peek_head_len(st |
| |
| if (!len && vq->busyloop_timeout) { |
| /* Both tx vq and rx socket were polled here */ |
| - mutex_lock(&vq->mutex); |
| + mutex_lock_nested(&vq->mutex, 1); |
| vhost_disable_notify(&net->dev, vq); |
| |
| preempt_disable(); |
| @@ -657,7 +657,7 @@ static void handle_rx(struct vhost_net * |
| struct iov_iter fixup; |
| __virtio16 num_buffers; |
| |
| - mutex_lock(&vq->mutex); |
| + mutex_lock_nested(&vq->mutex, 0); |
| sock = vq->private_data; |
| if (!sock) |
| goto out; |