Re: [PATCH net 2/2] octeontx2-pf: pass the skb to otx2_dma_unmap_skb_frags()
From: Ratheesh Kannoth
Date: Tue Oct 27 2026 - 22:38:55 EST
On 2026-10-28 at 01:24:07, Nicolai Buchwitz (nb@xxxxxxxxxxx) wrote:
> After a DMA mapping error, the unmap reads an skb pointer that is not
> set yet. It can be NULL or left over from an earlier packet.
>
> Fixes: 195c3d463181 ("octeontx2-pf: map skb data as device writeable")
> Signed-off-by: Nicolai Buchwitz <nb@xxxxxxxxxxx>
> ---
> drivers/net/ethernet/marvell/octeontx2/nic/cn10k_ipsec.c | 2 +-
> drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c | 5 ++---
> drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h | 3 ++-
> drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c | 10 +++++-----
> 4 files changed, 10 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/cn10k_ipsec.c b/drivers/net/ethernet/marvell/octeontx2/nic/cn10k_ipsec.c
> index 3920cd0985831..4434356087814 100644
> --- a/drivers/net/ethernet/marvell/octeontx2/nic/cn10k_ipsec.c
> +++ b/drivers/net/ethernet/marvell/octeontx2/nic/cn10k_ipsec.c
> @@ -1037,7 +1037,7 @@ bool cn10k_ipsec_transmit(struct otx2_nic *pf, struct netdev_queue *txq,
> cn10k_cpt_inst_flush(pf, &inst, sizeof(struct cpt_inst_s));
> return true;
> drop:
> - otx2_dma_unmap_skb_frags(pf, &sq->sg[sq->head]);
> + otx2_dma_unmap_skb_frags(pf, &sq->sg[sq->head], skb);
> sq->sg[sq->head].skb = (u64)NULL;
> atomic_long_inc(&pf->hw.dev_stats.tx_discards);
> dev_kfree_skb_any(skb);
> diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c
> index c441c0161dbf4..c85436457286e 100644
> --- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c
> +++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c
> @@ -2132,13 +2132,12 @@ dma_addr_t otx2_dma_map_skb_frag(struct otx2_nic *pfvf,
> return otx2_dma_map_page(pfvf, page, offset, *len, dir);
> }
>
> -void otx2_dma_unmap_skb_frags(struct otx2_nic *pfvf, struct sg_list *sg)
> +void otx2_dma_unmap_skb_frags(struct otx2_nic *pfvf, struct sg_list *sg,
> + struct sk_buff *skb)
> {
> enum dma_data_direction dir = DMA_TO_DEVICE;
> - struct sk_buff *skb = NULL;
> int seg;
>
> - skb = (struct sk_buff *)sg->skb;
> if (unlikely(xfrm_offload(skb)))
> dir = DMA_BIDIRECTIONAL;
>
Acked-by: Ratheesh Kannoth <rkannoth@xxxxxxxxxxx>