From: "Neeli, Srinivas" <srneeli@amd.com>
To: sashiko-reviews@lists.linux.dev, Srinivas Neeli <srinivas.neeli@amd.com>
Cc: Frank.Li@kernel.org, vkoul@kernel.org, dmaengine@vger.kernel.org
Subject: Re: [PATCH V3 3/4] net: xilinx: axienet: Derive RX frame length from DMA residue
Date: Thu, 9 Jul 2026 21:48:35 +0530 [thread overview]
Message-ID: <75675ea2-04a8-4eed-9151-919304f9cd79@amd.com> (raw)
In-Reply-To: <20260709101123.375A41F00A3A@smtp.kernel.org>
Hi,
On 7/9/2026 3:41 PM, sashiko-bot@kernel.org wrote:
> Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
>
> Pre-existing issues:
> - [High] Pending SKBs and DMA mappings are completely leaked during device stop when using dmaengine.
> - [High] TX ring head/tail desynchronization on DMA mapping failure leads to use-after-free and double-free in the TX callback.
> --
>
> --- Patch [3]: [PATCH V3 3/4] net: xilinx: axienet: Derive RX frame length from DMA residue ---
> commit 0ead77c343fc9310122738aba9dee99007a10e45
> Author: Srinivas Neeli <srinivas.neeli@amd.com>
>
> net: xilinx: axienet: Derive RX frame length from DMA residue
>
> The dmaengine RX path previously determined the received frame length by
> reading APP word 4 of the DMA descriptor metadata. This patch updates the
> code to use the standard dmaengine residue mechanism instead, allowing the
> driver to work on designs without the AXI4-Stream status/control interface.
>
>> diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
>> index fcf517069d161..67d1b8e91d683 100644
>> --- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
>> +++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
>> @@ -53,7 +53,6 @@
>> #define TX_BD_NUM_MAX 4096
>> #define RX_BD_NUM_MAX 4096
>> #define DMA_NUM_APP_WORDS 5
>> -#define LEN_APP 4
>> #define RX_BUF_NUM_DEFAULT 128
>>
>> /* Must be shorter than length of ethtool_drvinfo.driver field to fit */
> [ ... ]
>
> drivers/net/ethernet/xilinx/xilinx_axienet_main.c:axienet_stop() {
> ...
> for (i = 0; i < TX_BD_NUM_MAX; i++)
> kfree(lp->tx_skb_ring[i]);
> kfree(lp->tx_skb_ring);
> for (i = 0; i < RX_BUF_NUM_DEFAULT; i++)
> kfree(lp->rx_skb_ring[i]);
> kfree(lp->rx_skb_ring);
> ...
> }
>
> [Severity: High]
> This isn't a bug introduced by this patch, but are pending SKBs and DMA
> mappings leaked during device stop when using dmaengine?
>
> The descriptor wrapper objects are freed here without first unmapping the
> associated DMA addresses or freeing the encapsulated SKBs.
>
> Since the driver loses all pointers to previously allocated SKBs and their DMA
> mappings, could this exhaust IOMMU space and leak memory each time the interface
> is brought down?
>
>
> drivers/net/ethernet/xilinx/xilinx_axienet_main.c:axienet_start_xmit_dmaengine() {
> ...
> lp->tx_ring_head++;
> sg_init_table(skbuf_dma->sgl, sg_len);
> ret = skb_to_sgvec(skb, skbuf_dma->sgl, 0, skb->len);
> if (ret < 0)
> goto xmit_error_drop_skb;
>
> ret = dma_map_sg(lp->dev, skbuf_dma->sgl, sg_len, DMA_TO_DEVICE);
> if (!ret)
> goto xmit_error_drop_skb;
> ...
> }
>
> drivers/net/ethernet/xilinx/xilinx_axienet_main.c:axienet_dma_tx_cb() {
> ...
> skbuf_dma = axienet_get_tx_desc(lp, lp->tx_ring_tail++);
> len = skbuf_dma->skb->len;
> txq = skb_get_tx_queue(lp->ndev, skbuf_dma->skb);
> ...
> dev_consume_skb_any(skbuf_dma->skb);
> ...
> }
>
> [Severity: High]
> This is a pre-existing issue, but does this lead to a TX ring head and tail
> desynchronization on DMA mapping failure?
>
> In axienet_start_xmit_dmaengine(), the tx_ring_head is advanced before the
> failure points, and the error path does not roll it back or submit a dummy
> descriptor.
>
> If skb_to_sgvec() or dma_map_sg() fails, and a subsequent packet successfully
> completes, axienet_dma_tx_cb() will unconditionally increment tx_ring_tail.
>
> Would it then incorrectly operate on the out-of-sync tail index, dereferencing
> and freeing the SKB pointer of the previously failed mapping?
Both issues identified (SKB/DMA cleanup in axienet_stop and TX ring
head/tail desync) are valid pre-existing concerns in the dmaengine path,
not introduced by this patch.
I will address these in a separate patch series.
Thanks,
Neeli Srinivas
next prev parent reply other threads:[~2026-07-09 16:18 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-08 10:06 [PATCH V3 0/4] dmaengine: xilinx_dma: MCDMA descriptor and metadata handling improvements Srinivas Neeli
2026-07-08 10:06 ` [PATCH V3 1/4] dmaengine: xilinx_dma: Fix MCDMA descriptor fields based on DMA direction Srinivas Neeli
2026-07-08 15:32 ` Pandey, Radhey Shyam
2026-07-08 10:06 ` [PATCH V3 2/4] dmaengine: xilinx_dma: Move descriptors to done list based on completion bit Srinivas Neeli
2026-07-08 15:56 ` Pandey, Radhey Shyam
2026-07-09 10:11 ` sashiko-bot
2026-07-09 15:48 ` Neeli, Srinivas
2026-07-08 10:06 ` [PATCH V3 3/4] net: xilinx: axienet: Derive RX frame length from DMA residue Srinivas Neeli
2026-07-08 16:41 ` Pandey, Radhey Shyam
2026-07-09 10:11 ` sashiko-bot
2026-07-09 16:18 ` Neeli, Srinivas [this message]
2026-07-08 10:06 ` [PATCH V3 4/4] dmaengine: xilinx_dma: Extend metadata handling for AXI DMA and MCDMA Srinivas Neeli
2026-07-09 10:11 ` sashiko-bot
2026-07-09 16:28 ` Neeli, Srinivas
2026-07-09 14:13 ` Pandey, Radhey Shyam
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=75675ea2-04a8-4eed-9151-919304f9cd79@amd.com \
--to=srneeli@amd.com \
--cc=Frank.Li@kernel.org \
--cc=dmaengine@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
--cc=srinivas.neeli@amd.com \
--cc=vkoul@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox