LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH] mtd: fix memory leak
@ 2011-01-30 9:31 Mathias Krause
2011-01-30 14:52 ` Artem Bityutskiy
0 siblings, 1 reply; 4+ messages in thread
From: Mathias Krause @ 2011-01-30 9:31 UTC (permalink / raw)
To: linux-mtd; +Cc: Joern Engel, David Woodhouse, linux-kernel, Mathias Krause
Commit 4f678a58 missed two cases where the memory allocated for name
would be leaked. This commit frees the memory when register_device()
fails and on unregister_devices().
Signed-off-by: Mathias Krause <minipli@googlemail.com>
---
drivers/mtd/devices/phram.c | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/drivers/mtd/devices/phram.c b/drivers/mtd/devices/phram.c
index 5239328..8d28fa0 100644
--- a/drivers/mtd/devices/phram.c
+++ b/drivers/mtd/devices/phram.c
@@ -117,6 +117,7 @@ static void unregister_devices(void)
list_for_each_entry_safe(this, safe, &phram_list, list) {
del_mtd_device(&this->mtd);
iounmap(this->mtd.priv);
+ kfree(this->mtd.name);
kfree(this);
}
}
@@ -275,6 +276,8 @@ static int phram_setup(const char *val, struct kernel_param *kp)
ret = register_device(name, start, len);
if (!ret)
pr_info("%s device: %#x at %#x\n", name, len, start);
+ else
+ kfree(name);
return ret;
}
--
1.5.6.5
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] mtd: fix memory leak
2011-01-30 9:31 [PATCH] mtd: fix memory leak Mathias Krause
@ 2011-01-30 14:52 ` Artem Bityutskiy
2011-01-30 17:35 ` Mathias Krause
0 siblings, 1 reply; 4+ messages in thread
From: Artem Bityutskiy @ 2011-01-30 14:52 UTC (permalink / raw)
To: Mathias Krause; +Cc: linux-mtd, David Woodhouse, Joern Engel, linux-kernel
Hi,
On Sun, 2011-01-30 at 10:31 +0100, Mathias Krause wrote:
> diff --git a/drivers/mtd/devices/phram.c b/drivers/mtd/devices/phram.c
> index 5239328..8d28fa0 100644
> --- a/drivers/mtd/devices/phram.c
> +++ b/drivers/mtd/devices/phram.c
> @@ -117,6 +117,7 @@ static void unregister_devices(void)
> list_for_each_entry_safe(this, safe, &phram_list, list) {
> del_mtd_device(&this->mtd);
> iounmap(this->mtd.priv);
> + kfree(this->mtd.name);
> kfree(this);
> }
Since register_device() did not allocate it, unregister_devices() should
not free it. Hence, I think it is better to free(name) just after
calling unregister_devices().
--
Best Regards,
Artem Bityutskiy (Артём Битюцкий)
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] mtd: fix memory leak
2011-01-30 14:52 ` Artem Bityutskiy
@ 2011-01-30 17:35 ` Mathias Krause
2011-02-06 15:08 ` Artem Bityutskiy
0 siblings, 1 reply; 4+ messages in thread
From: Mathias Krause @ 2011-01-30 17:35 UTC (permalink / raw)
To: dedekind1; +Cc: linux-mtd, David Woodhouse, Joern Engel, linux-kernel
On 30.01.2011 at 15:52, Artem Bityutskiy wrote:
> Hi,
>
> On Sun, 2011-01-30 at 10:31 +0100, Mathias Krause wrote:
>> diff --git a/drivers/mtd/devices/phram.c b/drivers/mtd/devices/phram.c
>> index 5239328..8d28fa0 100644
>> --- a/drivers/mtd/devices/phram.c
>> +++ b/drivers/mtd/devices/phram.c
>> @@ -117,6 +117,7 @@ static void unregister_devices(void)
>> list_for_each_entry_safe(this, safe, &phram_list, list) {
>> del_mtd_device(&this->mtd);
>> iounmap(this->mtd.priv);
>> + kfree(this->mtd.name);
>> kfree(this);
>> }
>
> Since register_device() did not allocate it, unregister_devices() should
> not free it.
I agree with you, the internal API is a little quirky regarding that point. register_device() should strdup() the name and not just blindly use it. But since the memory for name was already allocated via kmalloc() in phram_setup() it seems a little nitpicky to copy it once again in register_device().
> Hence, I think it is better to free(name) just after
> calling unregister_devices().
This is not possible because unregister_devices() unregisters all devices, not just a single instance. Though name must be freed for every object in the list. After unregister_devices() returns the list is empty and no pointer to the memory locations do exist any more. So my patch was the straight forward fix for the memory leak.
Regards,
Mathias
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] mtd: fix memory leak
2011-01-30 17:35 ` Mathias Krause
@ 2011-02-06 15:08 ` Artem Bityutskiy
0 siblings, 0 replies; 4+ messages in thread
From: Artem Bityutskiy @ 2011-02-06 15:08 UTC (permalink / raw)
To: Mathias Krause; +Cc: linux-mtd, David Woodhouse, Joern Engel, linux-kernel
On Sun, 2011-01-30 at 18:35 +0100, Mathias Krause wrote:
> On 30.01.2011 at 15:52, Artem Bityutskiy wrote:
> > Hi,
> >
> > On Sun, 2011-01-30 at 10:31 +0100, Mathias Krause wrote:
> >> diff --git a/drivers/mtd/devices/phram.c b/drivers/mtd/devices/phram.c
> >> index 5239328..8d28fa0 100644
> >> --- a/drivers/mtd/devices/phram.c
> >> +++ b/drivers/mtd/devices/phram.c
> >> @@ -117,6 +117,7 @@ static void unregister_devices(void)
> >> list_for_each_entry_safe(this, safe, &phram_list, list) {
> >> del_mtd_device(&this->mtd);
> >> iounmap(this->mtd.priv);
> >> + kfree(this->mtd.name);
> >> kfree(this);
> >> }
> >
> > Since register_device() did not allocate it, unregister_devices() should
> > not free it.
>
> I agree with you, the internal API is a little quirky regarding that point. register_device() should strdup() the name and not just blindly use it. But since the memory for name was already allocated via kmalloc() in phram_setup() it seems a little nitpicky to copy it once again in register_device().
>
> > Hence, I think it is better to free(name) just after
> > calling unregister_devices().
>
> This is not possible because unregister_devices() unregisters all devices, not just a single instance. Though name must be freed for every object in the list. After unregister_devices() returns the list is empty and no pointer to the memory locations do exist any more. So my patch was the straight forward fix for the memory leak.
OK, I agree, I think this patch is good enough, pushed to l2-mtd-2.6.git
tree, thanks.
--
Best Regards,
Artem Bityutskiy (Артём Битюцкий)
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2011-02-06 15:09 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-01-30 9:31 [PATCH] mtd: fix memory leak Mathias Krause
2011-01-30 14:52 ` Artem Bityutskiy
2011-01-30 17:35 ` Mathias Krause
2011-02-06 15:08 ` Artem Bityutskiy
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).