mirror of
https://github.com/torvalds/linux.git
synced 2026-09-11 20:13:02 +02:00
net: bcmasp: clear txcb->last before writing each descriptor
bcmasp_xmit() only wrote txcb->last = true for the final fragment
of an SKB; non-final fragments left the field untouched. If a
descriptor slot was reused while it still held a stale true from
a previous SKB (possible when tx_spb_ring_full() underreported
fullness), bcmasp_tx_reclaim() would see last == true mid-SKB and
call dev_consume_skb_any() prematurely, freeing the sk_buff while
its remaining fragments were still in flight.
Unconditionally clear txcb->last before the conditional set so every
descriptor slot starts from a known false state regardless of what a
prior transmission left behind.
Fixes: 490cb41200 ("net: bcmasp: Add support for ASP2.0 Ethernet controller")
Signed-off-by: Justin Chen <justin.chen@broadcom.com>
Signed-off-by: Danesh Petigara <danesh.petigara@broadcom.com>
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
Link: https://patch.msgid.link/20260831184235.4133351-2-danesh.petigara@broadcom.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
adf50c47a4
commit
18e5e0ec0e
|
|
@ -301,6 +301,7 @@ static netdev_tx_t bcmasp_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
txcb->bytes_sent = total_bytes;
|
||||
dma_unmap_addr_set(txcb, dma_addr, mapping);
|
||||
dma_unmap_len_set(txcb, dma_len, size);
|
||||
txcb->last = false;
|
||||
if (!i) {
|
||||
desc->flags |= DESC_SOF;
|
||||
if (csum_hw)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user