Re: [uml-devel] [PATCH 3/3] uml: os-Linux/main.c memory leak fix

2011-07-08 Thread Vitaliy Ivanov
On Thu, Jul 7, 2011 at 7:48 PM, Richard Weinberger  wrote:
> Am Donnerstag 07 Juli 2011, 18:37:48 schrieb Vitaliy Ivanov:
>> >From 6db3c87f57e3e61d968da79f01fb21ba17fd5bc0 Mon Sep 17 00:00:00 2001
>>
>> From: Vitaliy Ivanov 
>> Date: Thu, 7 Jul 2011 19:29:06 +0300
>> Subject: [PATCH 3/3] uml: os-Linux/main.c memory leak fix
>>
>> We should cleanup memory even though 'putenv' fails.
>>
>> Signed-off-by: Vitaliy Ivanov 
>> ---
>>  arch/um/os-Linux/main.c |    2 +-
>>  1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/arch/um/os-Linux/main.c b/arch/um/os-Linux/main.c
>> index fb2a97a..67fe012 100644
>> --- a/arch/um/os-Linux/main.c
>> +++ b/arch/um/os-Linux/main.c
>> @@ -107,8 +107,8 @@ static void setup_env_path(void)
>>       snprintf(new_path, path_len, "PATH=%s" UML_LIB_PATH, old_path);
>>       if (putenv(new_path)) {
>>               perror("couldn't putenv to set a new PATH");
>> -             free(new_path);
>>       }
>> +     free(new_path);
>
> Uhhh, this will kill the PATH variable.
> putenv() does not copy the string...

That's actually depends on the version of glibc that you use. But yes,
agree, my fault. Please drop this one.
I hope I'm not in your shit-list already.:)

BTW, you said that you will share your git tree on kernel.org, is
there any news? I'm tracking what patches are accepted not to resend
them again.

Thanks,
Vitaliy

--
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security 
threats, fraudulent activity, and more. Splunk takes this data and makes 
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2d-c2
___
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel


Re: [uml-devel] [PATCH 3/3] uml: os-Linux/main.c memory leak fix

2011-07-08 Thread Richard Weinberger
Am Freitag 08 Juli 2011, 12:16:20 schrieb Vitaliy Ivanov:
> On Thu, Jul 7, 2011 at 7:48 PM, Richard Weinberger  wrote:
> > Am Donnerstag 07 Juli 2011, 18:37:48 schrieb Vitaliy Ivanov:
> >> >From 6db3c87f57e3e61d968da79f01fb21ba17fd5bc0 Mon Sep 17 00:00:00 2001
> >> 
> >> From: Vitaliy Ivanov 
> >> Date: Thu, 7 Jul 2011 19:29:06 +0300
> >> Subject: [PATCH 3/3] uml: os-Linux/main.c memory leak fix
> >> 
> >> We should cleanup memory even though 'putenv' fails.
> >> 
> >> Signed-off-by: Vitaliy Ivanov 
> >> ---
> >>  arch/um/os-Linux/main.c |2 +-
> >>  1 files changed, 1 insertions(+), 1 deletions(-)
> >> 
> >> diff --git a/arch/um/os-Linux/main.c b/arch/um/os-Linux/main.c
> >> index fb2a97a..67fe012 100644
> >> --- a/arch/um/os-Linux/main.c
> >> +++ b/arch/um/os-Linux/main.c
> >> @@ -107,8 +107,8 @@ static void setup_env_path(void)
> >>   snprintf(new_path, path_len, "PATH=%s" UML_LIB_PATH, old_path);
> >>   if (putenv(new_path)) {
> >>   perror("couldn't putenv to set a new PATH");
> >> - free(new_path);
> >>   }
> >> + free(new_path);
> > 
> > Uhhh, this will kill the PATH variable.
> > putenv() does not copy the string...
> 
> That's actually depends on the version of glibc that you use. But yes,
> agree, my fault. Please drop this one.
> I hope I'm not in your shit-list already.:)

No problem. :)

> BTW, you said that you will share your git tree on kernel.org, is
> there any news? I'm tracking what patches are accepted not to resend
> them again.

Yeah, I'll announce it on user-mode-linux-devel@lists.sourceforge.net.
It's done when it's done. :-P

Thanks,
//richard


--
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security 
threats, fraudulent activity, and more. Splunk takes this data and makes 
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2d-c2
___
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel


Re: [uml-devel] [PATCH 1/3] uml: drivers/net_user.c memory leak fix

2011-07-08 Thread Vitaliy Ivanov
On Thu, Jul 7, 2011 at 8:27 PM, Richard Weinberger  wrote:
> Am Donnerstag 07 Juli 2011, 18:36:02 schrieb Vitaliy Ivanov:
>> >From 9b9f36f46aa708c3245f5ded83f96421966b2edf Mon Sep 17 00:00:00 2001
>>
>> From: Vitaliy Ivanov 
>> Date: Thu, 7 Jul 2011 19:23:13 +0300
>> Subject: [PATCH 1/3] uml: drivers/net_user.c memory leak fix
>>
>> Perform memory cleanup on exit.
>> On receiving invalid 'pid' we still should clean 'output' variable.
>>
>> Signed-off-by: Vitaliy Ivanov 
>> ---
>>  arch/um/drivers/net_user.c |    5 +++--
>>  1 files changed, 3 insertions(+), 2 deletions(-)
>>
>> diff --git a/arch/um/drivers/net_user.c b/arch/um/drivers/net_user.c
>> index 9415dd9..989b653 100644
>> --- a/arch/um/drivers/net_user.c
>> +++ b/arch/um/drivers/net_user.c
>> @@ -228,10 +228,11 @@ static void change(char *dev, char *what, unsigned
>> char *addr, "buffer\n");
>>
>>       pid = change_tramp(argv, output, output_len);
>> -     if (pid < 0) return;
>>
>>       if (output != NULL) {
>> -             printk("%s", output);
>> +             if (pid >= 0) {
>> +                     printk("%s", output);
>> +             }
>>               kfree(output);
>>       }
>>  }
>
> This control logic is a bit strange.
> When change_tramp() fails we should not printk() the output variable.
>
> if (pid < 0){
>  free(output);
>  return;
> }
>
> Would be much cleaner.

I just didn't want to clone this free-return stuff. So, what you
proposing is like this:

...
output = uml_kmalloc(output_len, UM_GFP_KERNEL);
if (output == NULL)
printk(UM_KERN_ERR "change : failed to allocate output "
   "buffer\n");

pid = change_tramp(argv, output, output_len);
if (pid < 0) {
free(output);   <-- I'm not sure
but 'output' can be NULL here.
return;
}

if (output != NULL) {
printk("%s", output);
kfree(output);
}
}


I was trying to print 'output' only in case change_tramp is
successful. That's the old logic. And at the same time perform free
only in case output is not NULL.


Vitaliy

--
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security 
threats, fraudulent activity, and more. Splunk takes this data and makes 
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2d-c2
___
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel


Re: [uml-devel] [PATCH 3/3] uml: os-Linux/main.c memory leak fix

2011-07-08 Thread Vitaliy Ivanov
>> BTW, you said that you will share your git tree on kernel.org, is
>> there any news? I'm tracking what patches are accepted not to resend
>> them again.
>
> Yeah, I'll announce it on user-mode-linux-devel@lists.sourceforge.net.
> It's done when it's done. :-P

Sure. No problems.

- Vitaliy

--
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security 
threats, fraudulent activity, and more. Splunk takes this data and makes 
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2d-c2
___
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel


Re: [uml-devel] [PATCH 1/3] uml: drivers/net_user.c memory leak fix

2011-07-08 Thread Richard Weinberger
Am Freitag 08 Juli 2011, 12:30:56 schrieb Vitaliy Ivanov:
> On Thu, Jul 7, 2011 at 8:27 PM, Richard Weinberger  wrote:
> > Am Donnerstag 07 Juli 2011, 18:36:02 schrieb Vitaliy Ivanov:
> >> >From 9b9f36f46aa708c3245f5ded83f96421966b2edf Mon Sep 17 00:00:00 2001
> >> 
> >> From: Vitaliy Ivanov 
> >> Date: Thu, 7 Jul 2011 19:23:13 +0300
> >> Subject: [PATCH 1/3] uml: drivers/net_user.c memory leak fix
> >> 
> >> Perform memory cleanup on exit.
> >> On receiving invalid 'pid' we still should clean 'output' variable.
> >> 
> >> Signed-off-by: Vitaliy Ivanov 
> >> ---
> >>  arch/um/drivers/net_user.c |5 +++--
> >>  1 files changed, 3 insertions(+), 2 deletions(-)
> >> 
> >> diff --git a/arch/um/drivers/net_user.c b/arch/um/drivers/net_user.c
> >> index 9415dd9..989b653 100644
> >> --- a/arch/um/drivers/net_user.c
> >> +++ b/arch/um/drivers/net_user.c
> >> @@ -228,10 +228,11 @@ static void change(char *dev, char *what, unsigned
> >> char *addr, "buffer\n");
> >> 
> >>   pid = change_tramp(argv, output, output_len);
> >> - if (pid < 0) return;
> >> 
> >>   if (output != NULL) {
> >> - printk("%s", output);
> >> + if (pid >= 0) {
> >> + printk("%s", output);
> >> + }
> >>   kfree(output);
> >>   }
> >>  }
> > 
> > This control logic is a bit strange.
> > When change_tramp() fails we should not printk() the output variable.
> > 
> > if (pid < 0){
> >  free(output);
> >  return;
> > }
> > 
> > Would be much cleaner.
> 
> I just didn't want to clone this free-return stuff. So, what you
> proposing is like this:
> 
> ...
> output = uml_kmalloc(output_len, UM_GFP_KERNEL);
> if (output == NULL)
> printk(UM_KERN_ERR "change : failed to allocate output "
>"buffer\n");
> 
> pid = change_tramp(argv, output, output_len);
> if (pid < 0) {
> free(output);   <-- I'm not sure
> but 'output' can be NULL here.
> return;
> }
> 
> if (output != NULL) {
> printk("%s", output);
> kfree(output);
> }
> }
> 
> 
> I was trying to print 'output' only in case change_tramp is
> successful. That's the old logic. And at the same time perform free
> only in case output is not NULL.

Why?
Freeing a NULL pointer is perfectly fine.

Thanks,
//richard

--
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security 
threats, fraudulent activity, and more. Splunk takes this data and makes 
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2d-c2
___
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel


Re: [uml-devel] [PATCH 1/3] uml: drivers/net_user.c memory leak fix

2011-07-08 Thread Vitaliy Ivanov

> > > This control logic is a bit strange.
> > > When change_tramp() fails we should not printk() the output variable.
> > > 
> > > if (pid < 0){
> > >  free(output);
> > >  return;
> > > }
> > > 
> > > Would be much cleaner.
> > 
> > I just didn't want to clone this free-return stuff. So, what you
> > proposing is like this:
> > 
> > ...
> > output = uml_kmalloc(output_len, UM_GFP_KERNEL);
> > if (output == NULL)
> > printk(UM_KERN_ERR "change : failed to allocate output "
> >"buffer\n");
> > 
> > pid = change_tramp(argv, output, output_len);
> > if (pid < 0) {
> > free(output);   <-- I'm not sure but 
> > 'output' can be NULL here.
> > return;
> > }
> > 
> > if (output != NULL) {
> > printk("%s", output);
> > kfree(output);
> > }
> > }
> > 
> > 
> > I was trying to print 'output' only in case change_tramp is
> > successful. That's the old logic. And at the same time perform free
> > only in case output is not NULL.
> 
> Why?
> Freeing a NULL pointer is perfectly fine.

I should agree that something that you propose has better readability.

So, here is updated patch.

Thanks
---
>From b0c5ca0336cc94b2fda251e0da7918394e59c5cd Mon Sep 17 00:00:00 2001
From: Vitaliy Ivanov 
Date: Fri, 8 Jul 2011 14:54:29 +0300
Subject: [PATCH] uml: drivers/net_user.c memory leak fix

Perform memory cleanup on exit.
On receiving invalid 'pid' we still should clean 'output' variable.

Signed-off-by: Vitaliy Ivanov 
Signed-off-by: Richard Weinberger 
---
 arch/um/drivers/net_user.c |5 -
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/arch/um/drivers/net_user.c b/arch/um/drivers/net_user.c
index 9415dd9..5201188 100644
--- a/arch/um/drivers/net_user.c
+++ b/arch/um/drivers/net_user.c
@@ -228,7 +228,10 @@ static void change(char *dev, char *what, unsigned char 
*addr,
   "buffer\n");
 
pid = change_tramp(argv, output, output_len);
-   if (pid < 0) return;
+   if (pid < 0) {
+   kfree(output);
+   return;
+   }
 
if (output != NULL) {
printk("%s", output);
-- 
1.7.0.4




--
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security 
threats, fraudulent activity, and more. Splunk takes this data and makes 
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2d-c2
___
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel


Re: [uml-devel] [PATCH 1/3] uml: drivers/net_user.c memory leak fix

2011-07-08 Thread Richard Weinberger
Am Freitag 08 Juli 2011, 15:00:44 schrieb Vitaliy Ivanov:
> > > > This control logic is a bit strange.
> > > > When change_tramp() fails we should not printk() the output variable.
> > > > 
> > > > if (pid < 0){
> > > > 
> > > >  free(output);
> > > >  return;
> > > > 
> > > > }
> > > > 
> > > > Would be much cleaner.
> > > 
> > > I just didn't want to clone this free-return stuff. So, what you
> > > proposing is like this:
> > > 
> > > ...
> > > 
> > > output = uml_kmalloc(output_len, UM_GFP_KERNEL);
> > > if (output == NULL)
> > > 
> > > printk(UM_KERN_ERR "change : failed to allocate output
> > > "
> > > 
> > >"buffer\n");
> > > 
> > > pid = change_tramp(argv, output, output_len);
> > > if (pid < 0) {
> > > 
> > > free(output);   <-- I'm not sure
> > > but 'output' can be NULL here. return;
> > > 
> > > }
> > > 
> > > if (output != NULL) {
> > > 
> > > printk("%s", output);
> > > kfree(output);
> > > 
> > > }
> > > 
> > > }
> > > 
> > > 
> > > I was trying to print 'output' only in case change_tramp is
> > > successful. That's the old logic. And at the same time perform free
> > > only in case output is not NULL.
> > 
> > Why?
> > Freeing a NULL pointer is perfectly fine.
> 
> I should agree that something that you propose has better readability.
> 
> So, here is updated patch.
> 
> Thanks
> ---
> 
> >From b0c5ca0336cc94b2fda251e0da7918394e59c5cd Mon Sep 17 00:00:00 2001
> 
> From: Vitaliy Ivanov 
> Date: Fri, 8 Jul 2011 14:54:29 +0300
> Subject: [PATCH] uml: drivers/net_user.c memory leak fix
> 
> Perform memory cleanup on exit.
> On receiving invalid 'pid' we still should clean 'output' variable.
> 
> Signed-off-by: Vitaliy Ivanov 
> Signed-off-by: Richard Weinberger 

Why are you adding my Signed-off-by?!
That's my job...

> ---
>  arch/um/drivers/net_user.c |5 -
>  1 files changed, 4 insertions(+), 1 deletions(-)
> 
> diff --git a/arch/um/drivers/net_user.c b/arch/um/drivers/net_user.c
> index 9415dd9..5201188 100644
> --- a/arch/um/drivers/net_user.c
> +++ b/arch/um/drivers/net_user.c
> @@ -228,7 +228,10 @@ static void change(char *dev, char *what, unsigned
> char *addr, "buffer\n");
> 
>   pid = change_tramp(argv, output, output_len);
> - if (pid < 0) return;
> + if (pid < 0) {
> + kfree(output);
> + return;
> + }
> 
>   if (output != NULL) {
>   printk("%s", output);

Anyway, Applied!

Thanks,
//richard

--
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security 
threats, fraudulent activity, and more. Splunk takes this data and makes 
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2d-c2
___
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel