Skip to content

Commit 9c79a8a

Browse files
LorenzoBianconikuba-moo
authored andcommitted
net: mvneta: fix possible memory leak in mvneta_swbm_add_rx_fragment
Recycle the page running page_pool_put_full_page() in mvneta_swbm_add_rx_fragment routine when the last descriptor contains just the FCS or if the received packet contains more than MAX_SKB_FRAGS fragments Fixes: ca0e014 ("net: mvneta: move skb build after descriptors processing") Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Link: https://lore.kernel.org/r/df6a2bad70323ee58d3901491ada31c1ca2a40b9.1605291228.git.lorenzo@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent 8e5debe commit 9c79a8a

1 file changed

Lines changed: 3 additions & 2 deletions

File tree

drivers/net/ethernet/marvell/mvneta.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2287,6 +2287,7 @@ mvneta_swbm_add_rx_fragment(struct mvneta_port *pp,
22872287
dma_sync_single_for_cpu(dev->dev.parent,
22882288
rx_desc->buf_phys_addr,
22892289
len, dma_dir);
2290+
rx_desc->buf_phys_addr = 0;
22902291

22912292
if (data_len > 0 && sinfo->nr_frags < MAX_SKB_FRAGS) {
22922293
skb_frag_t *frag = &sinfo->frags[sinfo->nr_frags];
@@ -2295,8 +2296,8 @@ mvneta_swbm_add_rx_fragment(struct mvneta_port *pp,
22952296
skb_frag_size_set(frag, data_len);
22962297
__skb_frag_set_page(frag, page);
22972298
sinfo->nr_frags++;
2298-
2299-
rx_desc->buf_phys_addr = 0;
2299+
} else {
2300+
page_pool_put_full_page(rxq->page_pool, page, true);
23002301
}
23012302
*size -= len;
23022303
}

0 commit comments

Comments
 (0)