]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: airoha: Fix memory leak in airoha_qdma_rx_process()
authorLorenzo Bianconi <lorenzo@kernel.org>
Thu, 2 Apr 2026 12:57:10 +0000 (14:57 +0200)
committerJakub Kicinski <kuba@kernel.org>
Fri, 3 Apr 2026 21:42:51 +0000 (14:42 -0700)
If an error occurs on the subsequents buffers belonging to the
non-linear part of the skb (e.g. due to an error in the payload length
reported by the NIC or if we consumed all the available fragments for
the skb), the page_pool fragment will not be linked to the skb so it will
not return to the pool in the airoha_qdma_rx_process() error path. Fix the
memory leak partially reverting commit 'd6d2b0e1538d ("net: airoha: Fix
page recycling in airoha_qdma_rx_process()")' and always running
page_pool_put_full_page routine in the airoha_qdma_rx_process() error
path.

Fixes: d6d2b0e1538d ("net: airoha: Fix page recycling in airoha_qdma_rx_process()")
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/20260402-airoha_qdma_rx_process-mem-leak-fix-v1-1-b5706f402d3c@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/airoha/airoha_eth.c

index 95ba99b89428e4cafb91ff7813e43ffeb38e6d9b..91cb63a32d9904e0700bcce45b53624677d75c6c 100644 (file)
@@ -697,9 +697,8 @@ free_frag:
                if (q->skb) {
                        dev_kfree_skb(q->skb);
                        q->skb = NULL;
-               } else {
-                       page_pool_put_full_page(q->page_pool, page, true);
                }
+               page_pool_put_full_page(q->page_pool, page, true);
        }
        airoha_qdma_fill_rx_queue(q);