]> git.ipfire.org Git - thirdparty/linux.git/commit
net: ionic: map SKB after pseudo-header checksum prep
authorMohammad Heib <mheib@redhat.com>
Fri, 31 Oct 2025 15:52:03 +0000 (17:52 +0200)
committerJakub Kicinski <kuba@kernel.org>
Tue, 4 Nov 2025 01:19:21 +0000 (17:19 -0800)
commitde0337d641bfa5b6d6b489e479792f1039274e84
tree96d886832680e05ad53c6849676ecef784aa1b66
parentd261f5b09c28850dc63ca1d3018596f829f402d5
net: ionic: map SKB after pseudo-header checksum prep

The TSO path called ionic_tx_map_skb() before preparing the TCP pseudo
checksum (ionic_tx_tcp_[inner_]pseudo_csum()), which may perform
skb_cow_head() and might modifies bytes in the linear header area.

Mapping first and then mutating the header risks:
  - Using a stale DMA address if skb_cow_head() relocates the head, and/or
  - Device reading stale header bytes on weakly-ordered systems
    (CPU writes after mapping are not guaranteed visible without an
    explicit dma_sync_single_for_device()).

Reorder the TX path to perform all header mutations (including
skb_cow_head()) *before* DMA mapping. Mapping is now done only after the
skb layout and header contents are final. This removes the need for any
post-mapping dma_sync and prevents on-wire corruption observed under
VLAN+TSO load after repeated runs.

This change is purely an ordering fix; no functional behavior change
otherwise.

Fixes: 0f3154e6bcb3 ("ionic: Add Tx and Rx handling")
Signed-off-by: Mohammad Heib <mheib@redhat.com>
Reviewed-by: Brett Creeley <brett.creeley@amd.com>
Link: https://patch.msgid.link/20251031155203.203031-2-mheib@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/pensando/ionic/ionic_txrx.c