> > -----Original Message----- > > From: Wei Fang <wei.fang@xxxxxxx> > > Sent: Monday, February 17, 2025 11:39 AM > [...] > > Subject: [PATCH net 1/8] net: enetc: fix the off-by-one issue in > > enetc_map_tx_buffs() > > > > When the DMA mapping error occurs, it will attempt to free 'count + 1' > > Hi Wei, > Are you sure? > > dma_err occurs before count is incremented, at least that's the design. > > First step already contradicts your claim: > ``` > static int enetc_map_tx_buffs(struct enetc_bdr *tx_ring, struct sk_buff *skb) > { [...] > int i, count = 0; > [...] > dma = dma_map_single(tx_ring->dev, skb->data, len, DMA_TO_DEVICE); > if (unlikely(dma_mapping_error(tx_ring->dev, dma))) > goto dma_err; > > ===> count is 0 on goto path! > [...] > count++; > ``` > Hi Claudiu, I think it's fine in your case, the count is 0, and the tx_swbd is not set, so it's unnecessary to call enetc_free_tx_frame() in the dma_err path. But if the count is not zero, then that is the problem, for example, count is 1, and then goto dma_err path, the it will attempt to free 2 tx_swbd.