Skip to content

Commit f00e35e

Browse files
wyjwangdavem330
authored andcommitted
virtio_net: fix virtnet_open and virtnet_probe competing for try_fill_recv
In function virtnet_open() and virtnet_probe(), func try_fill_recv() may be executed at the same time. VQ in virtqueue_add() has not been protected well and BUG_ON will be triggered when virito_net.ko being removed. Signed-off-by: Yunjian Wang <[email protected]> Acked-by: Jason Wang <[email protected]> Acked-by: Michael S. Tsirkin <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent bae5499 commit f00e35e

File tree

1 file changed

+2
-16
lines changed

1 file changed

+2
-16
lines changed

drivers/net/virtio_net.c

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1925,24 +1925,11 @@ static int virtnet_probe(struct virtio_device *vdev)
19251925

19261926
virtio_device_ready(vdev);
19271927

1928-
/* Last of all, set up some receive buffers. */
1929-
for (i = 0; i < vi->curr_queue_pairs; i++) {
1930-
try_fill_recv(vi, &vi->rq[i], GFP_KERNEL);
1931-
1932-
/* If we didn't even get one input buffer, we're useless. */
1933-
if (vi->rq[i].vq->num_free ==
1934-
virtqueue_get_vring_size(vi->rq[i].vq)) {
1935-
free_unused_bufs(vi);
1936-
err = -ENOMEM;
1937-
goto free_recv_bufs;
1938-
}
1939-
}
1940-
19411928
vi->nb.notifier_call = &virtnet_cpu_callback;
19421929
err = register_hotcpu_notifier(&vi->nb);
19431930
if (err) {
19441931
pr_debug("virtio_net: registering cpu notifier failed\n");
1945-
goto free_recv_bufs;
1932+
goto free_unregister_netdev;
19461933
}
19471934

19481935
/* Assume link up if device can't report link status,
@@ -1960,10 +1947,9 @@ static int virtnet_probe(struct virtio_device *vdev)
19601947

19611948
return 0;
19621949

1963-
free_recv_bufs:
1950+
free_unregister_netdev:
19641951
vi->vdev->config->reset(vdev);
19651952

1966-
free_receive_bufs(vi);
19671953
unregister_netdev(dev);
19681954
free_vqs:
19691955
cancel_delayed_work_sync(&vi->refill);

0 commit comments

Comments
 (0)