Netdev List
 help / color / mirror / Atom feed
* [PATCH net-next] net: ethernet: mtk_wed: Fix dma_unmap_single() size
@ 2026-10-15 14:01 Thomas Fourier
  2026-10-15 14:19 ` Lorenzo Bianconi
  0 siblings, 1 reply; 2+ messages in thread
From: Thomas Fourier @ 2026-10-15 14:01 UTC (permalink / raw)
  Cc: Thomas Fourier, Felix Fietkau, Lorenzo Bianconi, Andrew Lunn,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Matthias Brugger, AngeloGioacchino Del Regno, Sujuan Chen,
	open list:MEDIATEK ETHERNET DRIVER,
	open list:ARM/Mediatek SoC support,
	moderated list:ARM/Mediatek SoC support,
	moderated list:ARM/Mediatek SoC support

In mtk_wed_wo_queue_refill(), the entry->buf is DMA mapped with length
q->buf_size which saved in entry->len. However, in mtk_wed_wo_dequeue(),
the same buffer is DMA unmapped with length buf_len which is set to
SKB_WITH_OVERHEAD(q->buf_size).

Change the size to q->buf_size.

This was discovered with static analysis and was only compile-tested.

Fixes: 799684448e3e ("net: ethernet: mtk_wed: introduce wed wo support")
Signed-off-by: Thomas Fourier <fourier.thomas@gmail.com>
---
 drivers/net/ethernet/mediatek/mtk_wed_wo.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/mediatek/mtk_wed_wo.c b/drivers/net/ethernet/mediatek/mtk_wed_wo.c
index 7063c78bd35f..4f720ec53e20 100644
--- a/drivers/net/ethernet/mediatek/mtk_wed_wo.c
+++ b/drivers/net/ethernet/mediatek/mtk_wed_wo.c
@@ -99,7 +99,6 @@ static void *
 mtk_wed_wo_dequeue(struct mtk_wed_wo *wo, struct mtk_wed_wo_queue *q, u32 *len,
 		   bool flush)
 {
-	int buf_len = SKB_WITH_OVERHEAD(q->buf_size);
 	int index = (q->tail + 1) % q->n_desc;
 	struct mtk_wed_wo_queue_entry *entry;
 	struct mtk_wed_wo_queue_desc *desc;
@@ -123,7 +122,7 @@ mtk_wed_wo_dequeue(struct mtk_wed_wo *wo, struct mtk_wed_wo_queue *q, u32 *len,
 		*len = FIELD_GET(MTK_WED_WO_CTL_SD_LEN0,
 				 le32_to_cpu(READ_ONCE(desc->ctrl)));
 	if (buf)
-		dma_unmap_single(wo->hw->dev, entry->addr, buf_len,
+		dma_unmap_single(wo->hw->dev, entry->addr, q->buf_size,
 				 DMA_FROM_DEVICE);
 	entry->buf = NULL;
 
-- 
2.53.0


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH net-next] net: ethernet: mtk_wed: Fix dma_unmap_single() size
  2026-10-15 14:01 [PATCH net-next] net: ethernet: mtk_wed: Fix dma_unmap_single() size Thomas Fourier
@ 2026-10-15 14:19 ` Lorenzo Bianconi
  0 siblings, 0 replies; 2+ messages in thread
From: Lorenzo Bianconi @ 2026-10-15 14:19 UTC (permalink / raw)
  To: Thomas Fourier
  Cc: Felix Fietkau, Andrew Lunn, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Matthias Brugger,
	AngeloGioacchino Del Regno, Sujuan Chen,
	open list:MEDIATEK ETHERNET DRIVER,
	open list:ARM/Mediatek SoC support,
	moderated list:ARM/Mediatek SoC support,
	moderated list:ARM/Mediatek SoC support

[-- Attachment #1: Type: text/plain, Size: 1739 bytes --]

> In mtk_wed_wo_queue_refill(), the entry->buf is DMA mapped with length
> q->buf_size which saved in entry->len. However, in mtk_wed_wo_dequeue(),
> the same buffer is DMA unmapped with length buf_len which is set to
> SKB_WITH_OVERHEAD(q->buf_size).
> 
> Change the size to q->buf_size.
> 
> This was discovered with static analysis and was only compile-tested.
> 
> Fixes: 799684448e3e ("net: ethernet: mtk_wed: introduce wed wo support")
> Signed-off-by: Thomas Fourier <fourier.thomas@gmail.com>
> ---
>  drivers/net/ethernet/mediatek/mtk_wed_wo.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/drivers/net/ethernet/mediatek/mtk_wed_wo.c b/drivers/net/ethernet/mediatek/mtk_wed_wo.c
> index 7063c78bd35f..4f720ec53e20 100644
> --- a/drivers/net/ethernet/mediatek/mtk_wed_wo.c
> +++ b/drivers/net/ethernet/mediatek/mtk_wed_wo.c
> @@ -99,7 +99,6 @@ static void *
>  mtk_wed_wo_dequeue(struct mtk_wed_wo *wo, struct mtk_wed_wo_queue *q, u32 *len,
>  		   bool flush)
>  {
> -	int buf_len = SKB_WITH_OVERHEAD(q->buf_size);
>  	int index = (q->tail + 1) % q->n_desc;
>  	struct mtk_wed_wo_queue_entry *entry;
>  	struct mtk_wed_wo_queue_desc *desc;
> @@ -123,7 +122,7 @@ mtk_wed_wo_dequeue(struct mtk_wed_wo *wo, struct mtk_wed_wo_queue *q, u32 *len,
>  		*len = FIELD_GET(MTK_WED_WO_CTL_SD_LEN0,
>  				 le32_to_cpu(READ_ONCE(desc->ctrl)));
>  	if (buf)
> -		dma_unmap_single(wo->hw->dev, entry->addr, buf_len,
> +		dma_unmap_single(wo->hw->dev, entry->addr, q->buf_size,

I guess you can use entry->len here to align with the tx side. Anyway:

Acked-by: Lorenzo Bianconi <lorenzo@kernel.org>

>  				 DMA_FROM_DEVICE);
>  	entry->buf = NULL;
>  
> -- 
> 2.53.0
> 

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-10-15 14:19 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-15 14:01 [PATCH net-next] net: ethernet: mtk_wed: Fix dma_unmap_single() size Thomas Fourier
2026-10-15 14:19 ` Lorenzo Bianconi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox