On Wed, Jun 4, 2025 at 10:17 PM Bui Quang Minh <minhquangbu...@gmail.com> wrote: > > On 6/4/25 07:37, Jason Wang wrote: > > On Tue, Jun 3, 2025 at 11:07 PM Bui Quang Minh <minhquangbu...@gmail.com> > > wrote: > >> In virtio-net, we have not yet supported multi-buffer XDP packet in > >> zerocopy mode when there is a binding XDP program. However, in that > >> case, when receiving multi-buffer XDP packet, we skip the XDP program > >> and return XDP_PASS. As a result, the packet is passed to normal network > >> stack which is an incorrect behavior. This commit instead returns > >> XDP_DROP in that case. > >> > >> Fixes: 99c861b44eb1 ("virtio_net: xsk: rx: support recv merge mode") > >> Cc: sta...@vger.kernel.org > >> Signed-off-by: Bui Quang Minh <minhquangbu...@gmail.com> > >> --- > >> drivers/net/virtio_net.c | 11 ++++++++--- > >> 1 file changed, 8 insertions(+), 3 deletions(-) > >> > >> diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > >> index e53ba600605a..4c35324d6e5b 100644 > >> --- a/drivers/net/virtio_net.c > >> +++ b/drivers/net/virtio_net.c > >> @@ -1309,9 +1309,14 @@ static struct sk_buff > >> *virtnet_receive_xsk_merge(struct net_device *dev, struct > >> ret = XDP_PASS; > > It would be simpler to just assign XDP_DROP here? > > > > Or if you wish to stick to the way, we can simply remove this assignment. > > This XDP_PASS is returned for the case when there is no XDP program > binding (!prog).
You're right. Acked-by: Jason Wang <jasow...@redhat.com> Thanks > > > > >> rcu_read_lock(); > >> prog = rcu_dereference(rq->xdp_prog); > >> - /* TODO: support multi buffer. */ > >> - if (prog && num_buf == 1) > >> - ret = virtnet_xdp_handler(prog, xdp, dev, xdp_xmit, stats); > >> + if (prog) { > >> + /* TODO: support multi buffer. */ > >> + if (num_buf == 1) > >> + ret = virtnet_xdp_handler(prog, xdp, dev, xdp_xmit, > >> + stats); > >> + else > >> + ret = XDP_DROP; > >> + } > >> rcu_read_unlock(); > >> > >> switch (ret) { > >> -- > >> 2.43.0 > >> > > Thanks > > > > > Thanks, > Quang Minh. > >