mirror of
https://github.com/torvalds/linux.git
synced 2026-10-04 18:29:02 +02:00
veth: manage XDP program pointers during channel resize
veth_set_channels() tears down XDP resources for removed RX queues
without clearing rq->xdp_prog. If the program is then detached or
replaced, those queues keep the old pointer after bpf_prog_put().
A later channel increase can re-enable NAPI and run the freed program.
BUG: unable to handle page fault for address: ffffc90000256048
Oops: Oops: 0000 [#1] SMP KASAN NOPTI
RIP: veth_xdp_rcv_skb (include/linux/filter.h:779
include/net/xdp.h:696 drivers/net/veth.c:820)
Call Trace:
veth_xdp_rcv (drivers/net/veth.c:941)
veth_poll (drivers/net/veth.c:986)
__napi_poll (net/core/dev.c:7787)
net_rx_action (net/core/dev.c:7850 net/core/dev.c:8007)
handle_softirqs (kernel/softirq.c:645)
Kernel panic - not syncing: Fatal exception in interrupt
Fixes: 4752eeb3d8 ("veth: implement support for set_channel ethtool op")
Signed-off-by: Weiming Shi <bestswngs@gmail.com>
Acked-by: Stanislav Fomichev <sdf@fomichev.me>
Reviewed-by: Jiayuan Chen <jiayuan.chen@linux.dev>
Reviewed-by: Jason Xing <kerneljasonxing@gmail.com>
Link: https://patch.msgid.link/20260921231856.1798630-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
7e87508b5c
commit
7104a37071
|
|
@ -1054,6 +1054,7 @@ static int __veth_napi_enable_range(struct net_device *dev, int start, int end)
|
|||
for (i = start; i < end; i++) {
|
||||
struct veth_rq *rq = &priv->rq[i];
|
||||
|
||||
rcu_assign_pointer(rq->xdp_prog, priv->_xdp_prog);
|
||||
napi_enable(&rq->xdp_napi);
|
||||
rcu_assign_pointer(priv->rq[i].napi, &priv->rq[i].xdp_napi);
|
||||
}
|
||||
|
|
@ -1088,6 +1089,7 @@ static void veth_napi_del_range(struct net_device *dev, int start, int end)
|
|||
|
||||
rcu_assign_pointer(priv->rq[i].napi, NULL);
|
||||
napi_disable(&rq->xdp_napi);
|
||||
rcu_assign_pointer(rq->xdp_prog, NULL);
|
||||
__netif_napi_del(&rq->xdp_napi);
|
||||
}
|
||||
synchronize_net();
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user