RE: [PATCH net 1/8] net: enetc: fix the off-by-one issue in enetc_map_tx_buffs()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> -----Original Message-----
> From: Wei Fang <wei.fang@xxxxxxx>
> Sent: Tuesday, February 18, 2025 4:03 AM
[,,,]
> Subject: RE: [PATCH net 1/8] net: enetc: fix the off-by-one issue in
> enetc_map_tx_buffs()
> 
> > > -----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.
> 

enetc_free_tx_frame() call on dma_err path is still needed for count 0 because
it needs to free the skb.





[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux