RE: [PATCH][linux-next] net: enetc: unmap DMA in enetc_send_cmd()

From: Claudiu Manoil
Date: Tue Oct 19 2021 - 15:47:24 EST


> -----Original Message-----
> From: Tim Gardner <tim.gardner@xxxxxxxxxxxxx>
> Sent: Tuesday, October 19, 2021 9:20 PM
[...]
> Subject: [PATCH][linux-next] net: enetc: unmap DMA in enetc_send_cmd()
>
> Coverity complains of a possible dereference of a null return value.
>
> 5. returned_null: kzalloc returns NULL. [show details]
> 6. var_assigned: Assigning: si_data = NULL return value from kzalloc.
> 488 si_data = kzalloc(data_size, __GFP_DMA | GFP_KERNEL);
> 489 cbd.length = cpu_to_le16(data_size);
> 490
> 491 dma = dma_map_single(&priv->si->pdev->dev, si_data,
> 492 data_size, DMA_FROM_DEVICE);
>
> While this kzalloc() is unlikely to fail, I did notice that the function
> returned without unmapping si_data.
>
> Fix this by refactoring the error paths and checking for kzalloc()
> failure.
>
> Fixes: 888ae5a3952ba ("net: enetc: add tc flower psfp offload driver")
> Cc: Claudiu Manoil <claudiu.manoil@xxxxxxx>
> Cc: "David S. Miller" <davem@xxxxxxxxxxxxx>
> Cc: Jakub Kicinski <kuba@xxxxxxxxxx>
> Cc: netdev@xxxxxxxxxxxxxxx
> Cc: linux-kernel@xxxxxxxxxxxxxxx (open list)
> Signed-off-by: Tim Gardner <tim.gardner@xxxxxxxxxxxxx>
> ---
>
> I am curious why you do not need to call dma_sync_single_for_device()
> before enetc_send_cmd()
> in order to flush the contents of CPU cache to RAM. Is it because
> __GFP_DMA marks
> that page as uncached ? Or is it because of the SOC this runs on ?
>

Not sure how it works like this, but I think dma_alloc_coherent() should have
been used here instead of the kmalloc + dma_map scheme. I don't have the
means to test this particular code path however.

Acked-by: Claudiu Manoil <claudiu.manoil@xxxxxxx>