[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CO1PR11MB50898CF7932A9260C9FE3008D670A@CO1PR11MB5089.namprd11.prod.outlook.com>
Date: Mon, 16 Jun 2025 20:47:04 +0000
From: "Keller, Jacob E" <jacob.e.keller@...el.com>
To: Jakub Kicinski <kuba@...nel.org>, "davem@...emloft.net"
<davem@...emloft.net>
CC: "netdev@...r.kernel.org" <netdev@...r.kernel.org>, "edumazet@...gle.com"
<edumazet@...gle.com>, "pabeni@...hat.com" <pabeni@...hat.com>,
"andrew+netdev@...n.ch" <andrew+netdev@...n.ch>, "horms@...nel.org"
<horms@...nel.org>, "lee@...ger.us" <lee@...ger.us>, Alexander Duyck
<alexanderduyck@...com>
Subject: RE: [PATCH net] eth: fbnic: avoid double free when failing to DMA-map
FW msg
> -----Original Message-----
> From: Jakub Kicinski <kuba@...nel.org>
> Sent: Monday, June 16, 2025 12:55 PM
> To: davem@...emloft.net
> Cc: netdev@...r.kernel.org; edumazet@...gle.com; pabeni@...hat.com;
> andrew+netdev@...n.ch; horms@...nel.org; lee@...ger.us; Keller, Jacob E
> <jacob.e.keller@...el.com>; Jakub Kicinski <kuba@...nel.org>; Alexander Duyck
> <alexanderduyck@...com>
> Subject: [PATCH net] eth: fbnic: avoid double free when failing to DMA-map FW
> msg
>
> The semantics are that caller of fbnic_mbx_map_msg() retains
> the ownership of the message on error. All existing callers
> dutifully free the page.
>
> Fixes: da3cde08209e ("eth: fbnic: Add FW communication mechanism")
> Reviewed-by: Alexander Duyck <alexanderduyck@...com>
> Signed-off-by: Jakub Kicinski <kuba@...nel.org>
> ---
> drivers/net/ethernet/meta/fbnic/fbnic_fw.c | 5 +----
> 1 file changed, 1 insertion(+), 4 deletions(-)
>
> diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_fw.c
> b/drivers/net/ethernet/meta/fbnic/fbnic_fw.c
> index edd4adad954a..72c688b17c5b 100644
> --- a/drivers/net/ethernet/meta/fbnic/fbnic_fw.c
> +++ b/drivers/net/ethernet/meta/fbnic/fbnic_fw.c
> @@ -127,11 +127,8 @@ static int fbnic_mbx_map_msg(struct fbnic_dev *fbd, int
> mbx_idx,
> return -EBUSY;
>
> addr = dma_map_single(fbd->dev, msg, PAGE_SIZE, direction);
> - if (dma_mapping_error(fbd->dev, addr)) {
> - free_page((unsigned long)msg);
> -
> + if (dma_mapping_error(fbd->dev, addr))
> return -ENOSPC;
> - }
Makes sense. It doesn't look like you free_page on other errors either.
Reviewed-by: Jacob Keller <jacob.e.keller@...el.com>
>
> mbx->buf_info[tail].msg = msg;
> mbx->buf_info[tail].addr = addr;
> --
> 2.49.0
Powered by blists - more mailing lists