Netdev List
 help / color / mirror / Atom feed
From: Jiayuan Chen <jiayuan.chen@linux.dev>
To: Jakub Kicinski <kuba@kernel.org>, davem@davemloft.net
Cc: netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com,
	andrew+netdev@lunn.ch, horms@kernel.org,
	Weiming Shi <bestswngs@gmail.com>
Subject: Re: [PATCH net v2] veth: manage XDP program pointers during channel resize
Date: Wed, 23 Sep 2026 17:31:28 +0800	[thread overview]
Message-ID: <d3c19b97-76ea-4848-b360-81b1528b91a8@linux.dev> (raw)
In-Reply-To: <20260921231856.1798630-1-kuba@kernel.org>


On 9/22/26 7:18 AM, Jakub Kicinski wrote:
> 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: 4752eeb3d891 ("veth: implement support for set_channel ethtool op")
> Signed-off-by: Weiming Shi <bestswngs@gmail.com>
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
> ---
> v2:
>   - different placement to avoid extra loops
> v1: https://lore.kernel.org/20260917153923.904124-3-bestswngs@gmail.com
> ---
>   drivers/net/veth.c | 2 ++
>   1 file changed, 2 insertions(+)
>
> diff --git a/drivers/net/veth.c b/drivers/net/veth.c
> index 6ed3ee81153f..71227d0389aa 100644
> --- a/drivers/net/veth.c
> +++ b/drivers/net/veth.c
> @@ -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();


Reviewed-by: Jiayuan Chen <jiayuan.chen@linux.dev>


  parent reply	other threads:[~2026-09-23  9:31 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-21 23:18 [PATCH net v2] veth: manage XDP program pointers during channel resize Jakub Kicinski
2026-09-22 23:02 ` Stanislav Fomichev
2026-09-23  9:31 ` Jiayuan Chen [this message]
2026-09-23  9:53 ` Jason Xing
2026-09-24  0:00 ` patchwork-bot+netdevbpf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=d3c19b97-76ea-4848-b360-81b1528b91a8@linux.dev \
    --to=jiayuan.chen@linux.dev \
    --cc=andrew+netdev@lunn.ch \
    --cc=bestswngs@gmail.com \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=horms@kernel.org \
    --cc=kuba@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox