bpf, xdp: virtio_net use access ptr macro for xdp enable check
authorJohn Fastabend <john.fastabend@gmail.com>
Mon, 27 Jan 2020 00:14:01 +0000 (16:14 -0800)
committerDaniel Borkmann <daniel@iogearbox.net>
Mon, 27 Jan 2020 10:16:25 +0000 (11:16 +0100)
virtio_net currently relies on rcu critical section to access the xdp
program in its xdp_xmit handler. However, the pointer to the xdp program
is only used to do a NULL pointer comparison to determine if xdp is
enabled or not.

Use rcu_access_pointer() instead of rcu_dereference() to reflect this.
Then later when we drop rcu_read critical section virtio_net will not
need in special handling.

Signed-off-by: John Fastabend <john.fastabend@gmail.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Jesper Dangaard Brouer <brouer@redhat.com>
Link: https://lore.kernel.org/bpf/1580084042-11598-3-git-send-email-john.fastabend@gmail.com
drivers/net/virtio_net.c

index c458cd313281e0afc8437b8dd88c75b23e0747f6..2fe7a3188282cd368be3dd6e2573afe39abf05e2 100644 (file)
@@ -501,7 +501,7 @@ static int virtnet_xdp_xmit(struct net_device *dev,
        /* Only allow ndo_xdp_xmit if XDP is loaded on dev, as this
         * indicate XDP resources have been successfully allocated.
         */
-       xdp_prog = rcu_dereference(rq->xdp_prog);
+       xdp_prog = rcu_access_pointer(rq->xdp_prog);
        if (!xdp_prog)
                return -ENXIO;