* [PATCH] bus: sunxi-rsb: Fix a small memory leak
@ 2018-12-18 8:28 Dan Carpenter
2018-12-18 12:51 ` Chen-Yu Tsai
0 siblings, 1 reply; 2+ messages in thread
From: Dan Carpenter @ 2018-12-18 8:28 UTC (permalink / raw)
To: Maxime Ripard; +Cc: Chen-Yu Tsai, kernel-janitors, linux-arm-kernel
The problem is in __devm_regmap_init_sunxi_rsb(). If the call to
__devm_regmap_init() fails, then we leak the "ctx" allocation.
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
---
drivers/bus/sunxi-rsb.c | 10 +---------
1 file changed, 1 insertion(+), 9 deletions(-)
diff --git a/drivers/bus/sunxi-rsb.c b/drivers/bus/sunxi-rsb.c
index 1b76d9585902..5ec25c8164d1 100644
--- a/drivers/bus/sunxi-rsb.c
+++ b/drivers/bus/sunxi-rsb.c
@@ -417,17 +417,9 @@ static int regmap_sunxi_rsb_reg_write(void *context, unsigned int reg,
return sunxi_rsb_write(rdev->rsb, rdev->rtaddr, reg, &val, ctx->size);
}
-static void regmap_sunxi_rsb_free_ctx(void *context)
-{
- struct sunxi_rsb_ctx *ctx = context;
-
- kfree(ctx);
-}
-
static struct regmap_bus regmap_sunxi_rsb = {
.reg_write = regmap_sunxi_rsb_reg_write,
.reg_read = regmap_sunxi_rsb_reg_read,
- .free_context = regmap_sunxi_rsb_free_ctx,
.reg_format_endian_default = REGMAP_ENDIAN_NATIVE,
.val_format_endian_default = REGMAP_ENDIAN_NATIVE,
};
@@ -446,7 +438,7 @@ static struct sunxi_rsb_ctx *regmap_sunxi_rsb_init_ctx(struct sunxi_rsb_device *
return ERR_PTR(-EINVAL);
}
- ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+ ctx = devm_kzalloc(&rdev->dev, sizeof(*ctx), GFP_KERNEL);
if (!ctx)
return ERR_PTR(-ENOMEM);
--
2.17.1
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH] bus: sunxi-rsb: Fix a small memory leak
2018-12-18 8:28 [PATCH] bus: sunxi-rsb: Fix a small memory leak Dan Carpenter
@ 2018-12-18 12:51 ` Chen-Yu Tsai
0 siblings, 0 replies; 2+ messages in thread
From: Chen-Yu Tsai @ 2018-12-18 12:51 UTC (permalink / raw)
To: Dan Carpenter
Cc: Maxime Ripard, Mark Brown, kernel-janitors, linux-arm-kernel
Hi,
On Tue, Dec 18, 2018 at 4:28 PM Dan Carpenter <dan.carpenter@oracle.com> wrote:
>
> The problem is in __devm_regmap_init_sunxi_rsb(). If the call to
> __devm_regmap_init() fails, then we leak the "ctx" allocation.
This seems to be the same pattern with regmap implementations that
allocate context data, the other two being:
- drivers/base/regmap/regmap-mmio.c
- drivers/bluetooth/btintel.c
(CC-ing Mark) Maybe it's worth fixing in regmap itself?
> Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
> ---
> drivers/bus/sunxi-rsb.c | 10 +---------
> 1 file changed, 1 insertion(+), 9 deletions(-)
>
> diff --git a/drivers/bus/sunxi-rsb.c b/drivers/bus/sunxi-rsb.c
> index 1b76d9585902..5ec25c8164d1 100644
> --- a/drivers/bus/sunxi-rsb.c
> +++ b/drivers/bus/sunxi-rsb.c
> @@ -417,17 +417,9 @@ static int regmap_sunxi_rsb_reg_write(void *context, unsigned int reg,
> return sunxi_rsb_write(rdev->rsb, rdev->rtaddr, reg, &val, ctx->size);
> }
>
> -static void regmap_sunxi_rsb_free_ctx(void *context)
> -{
> - struct sunxi_rsb_ctx *ctx = context;
> -
> - kfree(ctx);
> -}
> -
> static struct regmap_bus regmap_sunxi_rsb = {
> .reg_write = regmap_sunxi_rsb_reg_write,
> .reg_read = regmap_sunxi_rsb_reg_read,
> - .free_context = regmap_sunxi_rsb_free_ctx,
> .reg_format_endian_default = REGMAP_ENDIAN_NATIVE,
> .val_format_endian_default = REGMAP_ENDIAN_NATIVE,
> };
> @@ -446,7 +438,7 @@ static struct sunxi_rsb_ctx *regmap_sunxi_rsb_init_ctx(struct sunxi_rsb_device *
> return ERR_PTR(-EINVAL);
> }
>
> - ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
> + ctx = devm_kzalloc(&rdev->dev, sizeof(*ctx), GFP_KERNEL);
This decouples the lifetime of ctx from the regmap itself. IMO it
would be better to check the return value of __devm_regmap_init()
and act accordingly instead.
ChenYu
> if (!ctx)
> return ERR_PTR(-ENOMEM);
>
> --
> 2.17.1
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2018-12-18 12:51 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-12-18 8:28 [PATCH] bus: sunxi-rsb: Fix a small memory leak Dan Carpenter
2018-12-18 12:51 ` Chen-Yu Tsai
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox