Re: [PATCH net-next V6 4/4] virtio-net: synchronize probe with ndo_set_features
From: Jason Wang <jasowang@redhat.com>
Date: 2024-08-13 03:46:02
Also in:
lkml, netdev
On Tue, Aug 6, 2024 at 8:25 PM Michael S. Tsirkin [off-list ref] wrote:
On Tue, Aug 06, 2024 at 10:22:24AM +0800, Jason Wang wrote:quoted
We calculate guest offloads during probe without the protection of rtnl_lock. This lead to race between probe and ndo_set_features. Fix this by moving the calculation under the rtnl_lock. Signed-off-by: Jason Wang <jasowang@redhat.com>Fixes tag pls?
Fixes: 3f93522ffab2 ("virtio-net: switch off offloads on demand if
possible on XDP set")
Thanks
quoted
--- drivers/net/virtio_net.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index fc5196ca8d51..1d86aa07c871 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c@@ -6596,6 +6596,11 @@ static int virtnet_probe(struct virtio_device *vdev) netif_carrier_on(dev); } + for (i = 0; i < ARRAY_SIZE(guest_offloads); i++) + if (virtio_has_feature(vi->vdev, guest_offloads[i])) + set_bit(guest_offloads[i], &vi->guest_offloads); + vi->guest_offloads_capable = vi->guest_offloads; + rtnl_unlock(); err = virtnet_cpu_notif_add(vi);@@ -6604,11 +6609,6 @@ static int virtnet_probe(struct virtio_device *vdev) goto free_unregister_netdev; } - for (i = 0; i < ARRAY_SIZE(guest_offloads); i++) - if (virtio_has_feature(vi->vdev, guest_offloads[i])) - set_bit(guest_offloads[i], &vi->guest_offloads); - vi->guest_offloads_capable = vi->guest_offloads; - pr_debug("virtnet: registered device %s with %d RX and TX vq's\n", dev->name, max_queue_pairs); --2.31.1