2018-09-05 11:24:44

by Ding Xiang

[permalink] [raw]
Subject: [PATCH V2] mips: txx9: fix resource leak after register fail

the memory allocated and ioremap address need free after
device_register return error.

v2: remove redundant "return"

Signed-off-by: Ding Xiang <[email protected]>
---
arch/mips/txx9/generic/setup.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/arch/mips/txx9/generic/setup.c b/arch/mips/txx9/generic/setup.c
index f6d9182..e116a55 100644
--- a/arch/mips/txx9/generic/setup.c
+++ b/arch/mips/txx9/generic/setup.c
@@ -961,11 +961,12 @@ void __init txx9_sramc_init(struct resource *r)
err = sysfs_create_bin_file(&dev->dev.kobj, &dev->bindata_attr);
if (err) {
device_unregister(&dev->dev);
- iounmap(dev->base);
- kfree(dev);
+ goto exit_free;
}
return;
exit_put:
put_device(&dev->dev);
- return;
+exit_free:
+ iounmap(dev->base);
+ kfree(dev);
}
--
1.9.1





2018-09-05 15:53:28

by Atsushi Nemoto

[permalink] [raw]
Subject: Re: [PATCH V2] mips: txx9: fix resource leak after register fail

On Wed, 5 Sep 2018 19:22:19 +0800, Ding Xiang <[email protected]> wrote:
> the memory allocated and ioremap address need free after
> device_register return error.
...
> exit_put:
> put_device(&dev->dev);
> - return;
> +exit_free:
> + iounmap(dev->base);
> + kfree(dev);

This change will break exit_put error path.
I think kfree will be called from txx9_device_release by put_device.

Please refer James's comment on previous trial:
<https://www.linux-mips.org/cgi-bin/mesg.cgi?a=linux-mips&i=20180305221833.GJ4197%40saruman>

---
Atsushi Nemoto

2018-09-06 02:19:43

by Ding Xiang

[permalink] [raw]
Subject: Re: [PATCH V2] mips: txx9: fix resource leak after register fail


On 9/5/2018 11:37 PM, Atsushi Nemoto wrote:
> On Wed, 5 Sep 2018 19:22:19 +0800, Ding Xiang <[email protected]> wrote:
>> the memory allocated and ioremap address need free after
>> device_register return error.
> ...
>> exit_put:
>> put_device(&dev->dev);
>> - return;
>> +exit_free:
>> + iounmap(dev->base);
>> + kfree(dev);
> This change will break exit_put error path.
> I think kfree will be called from txx9_device_release by put_device.
>
> Please refer James's comment on previous trial:
> <https://www.linux-mips.org/cgi-bin/mesg.cgi?a=linux-mips&i=20180305221833.GJ4197%40saruman>

yes, put_device will call txx9_device_release and free txx9_sramc_dev,
and kfree inĀ  sysfs_create_bin_file() error handle

is also unneeded, I will send a new patch soon