All of lore.kernel.org
 help / color / mirror / Atom feed
From: Miquel Raynal <miquel.raynal@bootlin.com>
To: Xin Xiong <xiongx18@fudan.edu.cn>
Cc: Tudor Ambarus <tudor.ambarus@microchip.com>,
	Richard Weinberger <richard@nod.at>,
	Vignesh Raghavendra <vigneshr@ti.com>,
	Nicolas Ferre <nicolas.ferre@microchip.com>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Ludovic Desroches <ludovic.desroches@microchip.com>,
	linux-mtd@lists.infradead.org,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, yuanxzhang@fudan.edu.cn,
	Xiyu Yang <xiyuyang19@fudan.edu.cn>,
	Xin Tan <tanxin.ctf@gmail.com>
Subject: Re: [PATCH] mtd: rawnand: atmel: fix refcount leaks in atmel_nand_controller_init
Date: Tue, 25 Jan 2022 18:55:56 +0100	[thread overview]
Message-ID: <20220125185556.6afb7eba@xps13> (raw)
In-Reply-To: <20220125123155.36891-1-xiongx18@fudan.edu.cn>

Hi Xin,

xiongx18@fudan.edu.cn wrote on Tue, 25 Jan 2022 20:31:56 +0800:

> The reference counting issue happens in several error handling paths
> on a refcounted object "nc->dmac". In these paths, the function simply
> returns the error code, forgetting to balance the reference count
> increased earlier by dma_request_channel(), which may cause refcount
> leaks. What's more, the "nc->mck" object also needs to be handled
> correctly.

You might want to split this into two commits.

> 
> Fix it by adding specific error handling code in those error paths.

You need a Fixes tag here.

> Signed-off-by: Xin Xiong <xiongx18@fudan.edu.cn>
> Signed-off-by: Xiyu Yang <xiyuyang19@fudan.edu.cn>
> Signed-off-by: Xin Tan <tanxin.ctf@gmail.com>

You can't do that. The patch is rather straightforward, so 3
authorship seem a little bit too much.

If someone suggested you a change, or sent you a proposal, you should
use a Suggested-by. If it was reported by a colleague, use Reported-by.
If it was co-developped, use the right tag and the right Signed-off-by
as documented in the submitted-process.rst file. If you picked the
patch from someone else, you must preserve the authorship and just add
your SoB.

> ---
>  drivers/mtd/nand/raw/atmel/nand-controller.c | 22 +++++++++++++++++---
>  1 file changed, 19 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/mtd/nand/raw/atmel/nand-controller.c b/drivers/mtd/nand/raw/atmel/nand-controller.c
> index f3276ee9e..b3801ebd2 100644
> --- a/drivers/mtd/nand/raw/atmel/nand-controller.c
> +++ b/drivers/mtd/nand/raw/atmel/nand-controller.c
> @@ -2060,13 +2060,15 @@ static int atmel_nand_controller_init(struct atmel_nand_controller *nc,
>  	nc->mck = of_clk_get(dev->parent->of_node, 0);
>  	if (IS_ERR(nc->mck)) {
>  		dev_err(dev, "Failed to retrieve MCK clk\n");
> -		return PTR_ERR(nc->mck);
> +		ret = PTR_ERR(nc->mck);
> +		goto out_release_dma;
>  	}
>  
>  	np = of_parse_phandle(dev->parent->of_node, "atmel,smc", 0);
>  	if (!np) {
>  		dev_err(dev, "Missing or invalid atmel,smc property\n");
> -		return -EINVAL;
> +		ret = -EINVAL;
> +		goto out_put_clk;
>  	}
>  
>  	nc->smc = syscon_node_to_regmap(np);
> @@ -2074,10 +2076,24 @@ static int atmel_nand_controller_init(struct atmel_nand_controller *nc,
>  	if (IS_ERR(nc->smc)) {
>  		ret = PTR_ERR(nc->smc);
>  		dev_err(dev, "Could not get SMC regmap (err = %d)\n", ret);
> -		return ret;
> +		goto out_put_clk;
>  	}
>  
>  	return 0;
> +
> +out_put_clk:
> +	clk_put(nc->mck);
> +	nc->mck = NULL;
> +
> +out_release_dma:
> +	if (nc->caps->has_dma && !atmel_nand_avoid_dma) {
> +		if (!IS_ERR_OR_NULL(nc->dmac)) {

	   && !IS_ERR...

> +			dma_release_channel(nc->dmac);
> +			nc->dmac = NULL;
> +		}
> +	}
> +
> +	return ret;
>  }
>  
>  static int


Thanks,
Miquèl

______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

WARNING: multiple messages have this Message-ID (diff)
From: Miquel Raynal <miquel.raynal@bootlin.com>
To: Xin Xiong <xiongx18@fudan.edu.cn>
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Vignesh Raghavendra <vigneshr@ti.com>,
	Xiyu Yang <xiyuyang19@fudan.edu.cn>,
	Tudor Ambarus <tudor.ambarus@microchip.com>,
	Richard Weinberger <richard@nod.at>,
	yuanxzhang@fudan.edu.cn, linux-kernel@vger.kernel.org,
	Ludovic Desroches <ludovic.desroches@microchip.com>,
	linux-mtd@lists.infradead.org, Xin Tan <tanxin.ctf@gmail.com>,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH] mtd: rawnand: atmel: fix refcount leaks in atmel_nand_controller_init
Date: Tue, 25 Jan 2022 18:55:56 +0100	[thread overview]
Message-ID: <20220125185556.6afb7eba@xps13> (raw)
In-Reply-To: <20220125123155.36891-1-xiongx18@fudan.edu.cn>

Hi Xin,

xiongx18@fudan.edu.cn wrote on Tue, 25 Jan 2022 20:31:56 +0800:

> The reference counting issue happens in several error handling paths
> on a refcounted object "nc->dmac". In these paths, the function simply
> returns the error code, forgetting to balance the reference count
> increased earlier by dma_request_channel(), which may cause refcount
> leaks. What's more, the "nc->mck" object also needs to be handled
> correctly.

You might want to split this into two commits.

> 
> Fix it by adding specific error handling code in those error paths.

You need a Fixes tag here.

> Signed-off-by: Xin Xiong <xiongx18@fudan.edu.cn>
> Signed-off-by: Xiyu Yang <xiyuyang19@fudan.edu.cn>
> Signed-off-by: Xin Tan <tanxin.ctf@gmail.com>

You can't do that. The patch is rather straightforward, so 3
authorship seem a little bit too much.

If someone suggested you a change, or sent you a proposal, you should
use a Suggested-by. If it was reported by a colleague, use Reported-by.
If it was co-developped, use the right tag and the right Signed-off-by
as documented in the submitted-process.rst file. If you picked the
patch from someone else, you must preserve the authorship and just add
your SoB.

> ---
>  drivers/mtd/nand/raw/atmel/nand-controller.c | 22 +++++++++++++++++---
>  1 file changed, 19 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/mtd/nand/raw/atmel/nand-controller.c b/drivers/mtd/nand/raw/atmel/nand-controller.c
> index f3276ee9e..b3801ebd2 100644
> --- a/drivers/mtd/nand/raw/atmel/nand-controller.c
> +++ b/drivers/mtd/nand/raw/atmel/nand-controller.c
> @@ -2060,13 +2060,15 @@ static int atmel_nand_controller_init(struct atmel_nand_controller *nc,
>  	nc->mck = of_clk_get(dev->parent->of_node, 0);
>  	if (IS_ERR(nc->mck)) {
>  		dev_err(dev, "Failed to retrieve MCK clk\n");
> -		return PTR_ERR(nc->mck);
> +		ret = PTR_ERR(nc->mck);
> +		goto out_release_dma;
>  	}
>  
>  	np = of_parse_phandle(dev->parent->of_node, "atmel,smc", 0);
>  	if (!np) {
>  		dev_err(dev, "Missing or invalid atmel,smc property\n");
> -		return -EINVAL;
> +		ret = -EINVAL;
> +		goto out_put_clk;
>  	}
>  
>  	nc->smc = syscon_node_to_regmap(np);
> @@ -2074,10 +2076,24 @@ static int atmel_nand_controller_init(struct atmel_nand_controller *nc,
>  	if (IS_ERR(nc->smc)) {
>  		ret = PTR_ERR(nc->smc);
>  		dev_err(dev, "Could not get SMC regmap (err = %d)\n", ret);
> -		return ret;
> +		goto out_put_clk;
>  	}
>  
>  	return 0;
> +
> +out_put_clk:
> +	clk_put(nc->mck);
> +	nc->mck = NULL;
> +
> +out_release_dma:
> +	if (nc->caps->has_dma && !atmel_nand_avoid_dma) {
> +		if (!IS_ERR_OR_NULL(nc->dmac)) {

	   && !IS_ERR...

> +			dma_release_channel(nc->dmac);
> +			nc->dmac = NULL;
> +		}
> +	}
> +
> +	return ret;
>  }
>  
>  static int


Thanks,
Miquèl

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2022-01-25 17:57 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-25 12:31 [PATCH] mtd: rawnand: atmel: fix refcount leaks in atmel_nand_controller_init Xin Xiong
2022-01-25 12:31 ` Xin Xiong
2022-01-25 17:55 ` Miquel Raynal [this message]
2022-01-25 17:55   ` Miquel Raynal

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220125185556.6afb7eba@xps13 \
    --to=miquel.raynal@bootlin.com \
    --cc=alexandre.belloni@bootlin.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=ludovic.desroches@microchip.com \
    --cc=nicolas.ferre@microchip.com \
    --cc=richard@nod.at \
    --cc=tanxin.ctf@gmail.com \
    --cc=tudor.ambarus@microchip.com \
    --cc=vigneshr@ti.com \
    --cc=xiongx18@fudan.edu.cn \
    --cc=xiyuyang19@fudan.edu.cn \
    --cc=yuanxzhang@fudan.edu.cn \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.