From: Jason Wang <hidden> Date: 2018-03-26 08:10:32
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 <redacted>
---
drivers/vhost/net.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
@@ -630,7 +630,7 @@ static int vhost_net_rx_peek_head_len(struct vhost_net *net, struct sock *sk)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();
From: "Michael S. Tsirkin" <mst@redhat.com> Date: 2018-03-26 13:24:23
On Mon, Mar 26, 2018 at 04:10:23PM +0800, Jason Wang wrote:
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 <redacted>
@@ -630,7 +630,7 @@ static int vhost_net_rx_peek_head_len(struct vhost_net *net, struct sock *sk)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();
From: David Miller <davem@davemloft.net> Date: 2018-03-26 16:59:36
From: Jason Wang <redacted>
Date: Mon, 26 Mar 2018 16:10:23 +0800
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 <redacted>