]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-client.git/commitdiff
net: ti: icssg-prueth: Fix memory leak in XDP_DROP for non-zero-copy mode
authorMeghana Malladi <m-malladi@ti.com>
Wed, 11 Mar 2026 09:54:41 +0000 (15:24 +0530)
committerJakub Kicinski <kuba@kernel.org>
Sat, 14 Mar 2026 19:14:44 +0000 (12:14 -0700)
Page recycling was removed from the XDP_DROP path in emac_run_xdp() to
avoid conflicts with AF_XDP zero-copy mode, which uses xsk_buff_free()
instead.

However, this causes a memory leak when running XDP programs that drop
packets in non-zero-copy mode (standard page pool mode). The pages are
never returned to the page pool, leading to OOM conditions.

Fix this by handling cleanup in the caller, emac_rx_packet().
When emac_run_xdp() returns ICSSG_XDP_CONSUMED for XDP_DROP, the
caller now recycles the page back to the page pool. The zero-copy
path, emac_rx_packet_zc() already handles cleanup correctly with
xsk_buff_free().

Fixes: 7a64bb388df3 ("net: ti: icssg-prueth: Add AF_XDP zero copy for RX")
Signed-off-by: Meghana Malladi <m-malladi@ti.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/20260311095441.1691636-1-m-malladi@ti.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/ti/icssg/icssg_common.c

index 0cf9dfe0fa362b4ff986b6815952f95b79cb476d..0a3cf2f848a572f65a4e0fd6f8b68d95d436c2d3 100644 (file)
@@ -1075,6 +1075,11 @@ static int emac_rx_packet(struct prueth_emac *emac, u32 flow_id, u32 *xdp_state)
                xdp_prepare_buff(&xdp, pa, PRUETH_HEADROOM, pkt_len, false);
 
                *xdp_state = emac_run_xdp(emac, &xdp, &pkt_len);
+               if (*xdp_state == ICSSG_XDP_CONSUMED) {
+                       page_pool_recycle_direct(pool, page);
+                       goto requeue;
+               }
+
                if (*xdp_state != ICSSG_XDP_PASS)
                        goto requeue;
                headroom = xdp.data - xdp.data_hard_start;