All of lore.kernel.org
 help / color / mirror / Atom feed
From: ebiederm@xmission.com (Eric W. Biederman)
To: Sergey Senozhatsky <sergey.senozhatsky@mail.by>
Cc: Greg KH <gregkh@suse.de>, Kay Sievers <kay.sievers@vrfy.org>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] kobject_set_name_vargs memory leak
Date: Fri, 26 Jun 2009 16:00:04 -0700	[thread overview]
Message-ID: <m17hyyfvnv.fsf@fess.ebiederm.org> (raw)
In-Reply-To: <20090626222937.GA3858@localdomain.by> (Sergey Senozhatsky's message of "Sat\, 27 Jun 2009 01\:29\:37 +0300")

Sergey Senozhatsky <sergey.senozhatsky@mail.by> writes:

> On (06/26/09 07:49), Greg KH wrote:
>> Date: Fri, 26 Jun 2009 07:49:49 -0700
>> From: Greg KH <gregkh@suse.de>
>> To: Sergey Senozhatsky <sergey.senozhatsky@mail.by>
>> Cc: Kay Sievers <kay.sievers@vrfy.org>,
>> 	"Eric W. Biederman" <ebiederm@xmission.com>,
>> 	linux-kernel@vger.kernel.org
>> Subject: Re: [PATCH] kobject_set_name_vargs memory leak
>> User-Agent: Mutt/1.5.19 (2009-01-05)
>> 
>> On Fri, Jun 26, 2009 at 05:36:52PM +0300, Sergey Senozhatsky wrote:
>> > Hello.
>> > I suppose this patch fixes memory leak in kobject.c
>> > Correct me if I'm wrong.
>> > Thanks.
>> > -----------
>> > 
>> > Fix memory leak when kobject_set_name_vargs returns -ENOMEM.
>> > 
>> > Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@mail.by>
>> > ---
>> > diff --git a/lib/kobject.c b/lib/kobject.c
>> > index b512b74..922cd8c 100644
>> > --- a/lib/kobject.c
>> > +++ b/lib/kobject.c
>> > @@ -222,8 +222,10 @@ int kobject_set_name_vargs(struct kobject *kobj, const char *fmt,
>> >  		return 0;
>> >  
>> >  	kobj->name = kvasprintf(GFP_KERNEL, fmt, vargs);
>> > -	if (!kobj->name)
>> > +	if (!kobj->name) {
>> > +		kfree(old_name);
>> >  		return -ENOMEM;
>> > +	}
>> 
>> We've been through this before (search lkml archives).  If kvasprintf
>> fails, then we don't want to free old_name, as the caller might want to
>> do something with it.
>> 
> Hello Greg,
>
> int kobject_set_name_vargs.... {
> 	const char *old_name = kobj->name;
>
> old_name is local variable.
>
> In the following lines we overwrite kobject->name.
>
> 	kobj->name = kvasprintf(GFP_KERNEL, fmt, vargs);
> 	if (!kobj->name)
> 		return -ENOMEM;
>
> It's not clear to me how we can do anything (including kfree) with old_name after 'return -ENOMEM'.

My feel is that if we fail we should restore kobject->name to old_name.

That should also prevent the leak without getting us into trouble elsewhere.

Eric


  reply	other threads:[~2009-06-26 23:00 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-06-26 14:36 [PATCH] kobject_set_name_vargs memory leak Sergey Senozhatsky
2009-06-26 14:49 ` Greg KH
2009-06-26 22:29   ` Sergey Senozhatsky
2009-06-26 23:00     ` Eric W. Biederman [this message]
2009-06-26 23:14       ` Sergey Senozhatsky
2009-06-26 23:23   ` Sergey Senozhatsky
2009-06-27  2:10     ` Eric W. Biederman
2009-06-27  9:33       ` Sergey Senozhatsky
2009-06-27  9:39       ` Sergey Senozhatsky
2009-06-27 23:56         ` Kay Sievers
2009-06-28 12:07           ` Eric W. Biederman
2009-06-28 13:02             ` Kay Sievers
2009-06-28 13:13               ` Eric W. Biederman
2009-06-28 13:40             ` Sergey Senozhatsky
2009-06-29  9:53             ` Dave Young

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m17hyyfvnv.fsf@fess.ebiederm.org \
    --to=ebiederm@xmission.com \
    --cc=gregkh@suse.de \
    --cc=kay.sievers@vrfy.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sergey.senozhatsky@mail.by \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.