Re: [PATCH 2/2] [ARM] am300epd: fix resource leak inam300_init_gpio_regs error path

From: Eric Miao
Date: Thu Mar 17 2011 - 11:07:18 EST


Applied.

On Mon, Mar 7, 2011 at 1:56 PM, Axel Lin <axel.lin@xxxxxxxxx> wrote:
> If gpio_request fails when i > 0, gpios[0] is not freed in current
> implementation.
>
> Signed-off-by: Axel Lin <axel.lin@xxxxxxxxx>
> ---
> Âarch/arm/mach-pxa/am300epd.c | Â 13 +++++++------
> Â1 files changed, 7 insertions(+), 6 deletions(-)
>
> diff --git a/arch/arm/mach-pxa/am300epd.c b/arch/arm/mach-pxa/am300epd.c
> index 993d75e..fa8bad2 100644
> --- a/arch/arm/mach-pxa/am300epd.c
> +++ b/arch/arm/mach-pxa/am300epd.c
> @@ -125,10 +125,7 @@ static int am300_init_gpio_regs(struct broadsheetfb_par *par)
> Â Â Â Â Â Â Â Âif (err) {
> Â Â Â Â Â Â Â Â Â Â Â Âdev_err(&am300_device->dev, "failed requesting "
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â"gpio %d, err=%d\n", i, err);
> - Â Â Â Â Â Â Â Â Â Â Â while (i >= DB0_GPIO_PIN)
> - Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â gpio_free(i--);
> - Â Â Â Â Â Â Â Â Â Â Â i = ARRAY_SIZE(gpios) - 1;
> - Â Â Â Â Â Â Â Â Â Â Â goto err_req_gpio;
> + Â Â Â Â Â Â Â Â Â Â Â goto err_req_gpio2;
> Â Â Â Â Â Â Â Â}
> Â Â Â Â}
>
> @@ -159,9 +156,13 @@ static int am300_init_gpio_regs(struct broadsheetfb_par *par)
>
> Â Â Â Âreturn 0;
>
> +err_req_gpio2:
> + Â Â Â while (--i >= DB0_GPIO_PIN)
> + Â Â Â Â Â Â Â gpio_free(i);
> + Â Â Â i = ARRAY_SIZE(gpios);
> Âerr_req_gpio:
> - Â Â Â while (i > 0)
> - Â Â Â Â Â Â Â gpio_free(gpios[i--]);
> + Â Â Â while (--i >= 0)
> + Â Â Â Â Â Â Â gpio_free(gpios[i]);
>
> Â Â Â Âreturn err;
> Â}
> --
> 1.7.2
>
>
>
>
¢éì®&Þ~º&¶¬–+-±éÝ¥Šw®žË±Êâmébžìdz¹Þ)í…æèw*jg¬±¨¶‰šŽŠÝj/êäz¹ÞŠà2ŠÞ¨è­Ú&¢)ß«a¶Úþø®G«éh®æj:+v‰¨Šwè†Ù>Wš±êÞiÛaxPjØm¶Ÿÿà -»+ƒùdš_