kobject: fix possible memory leak in kset_create_and_add()

Message ID 20221017023327.1793893-1-yangyingliang@huawei.com
State New
Headers
Series kobject: fix possible memory leak in kset_create_and_add() |

Commit Message

Yang Yingliang Oct. 17, 2022, 2:33 a.m. UTC
  If kset_register() fails in kset_create_and_add(), the name allocated
in kset_create() will be leaked. To fix this by calling kset_put() so
that the name will be freed in callback function kobject_cleanup() and
kset will be freed in kset_release().

unreferenced object 0xffff888103cc8c08 (size 8):
  comm "modprobe", pid 508, jiffies 4294915182 (age 120.020s)
  hex dump (first 8 bytes):
    62 79 5f 6e 61 6d 65 00                          by_name.
  backtrace:
    [<00000000572f97f9>] __kmalloc_track_caller+0x1ae/0x320
    [<00000000a167a5cc>] kstrdup+0x3a/0x70
    [<000000001cd0d05e>] kstrdup_const+0x68/0x80
    [<00000000b9101e6d>] kvasprintf_const+0x10b/0x190
    [<0000000088f2b8df>] kobject_set_name_vargs+0x56/0x150
    [<000000003f8aca68>] kobject_set_name+0xab/0xe0
    [<00000000249f7816>] kset_create_and_add+0x72/0x200

Fixes: b727c702896f ("kset: add kset_create_and_add function")
Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
---
 lib/kobject.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Greg KH Oct. 17, 2022, 4:51 a.m. UTC | #1
On Mon, Oct 17, 2022 at 10:33:27AM +0800, Yang Yingliang wrote:
> If kset_register() fails in kset_create_and_add(), the name allocated
> in kset_create() will be leaked.

How is kset_create_and_add() failing?  Is this in a real kernel, or
created with a fake fault injection?

thanks,

greg k-h
  
Yang Yingliang Oct. 17, 2022, 8:13 a.m. UTC | #2
Hi,

On 2022/10/17 12:51, Greg KH wrote:
> On Mon, Oct 17, 2022 at 10:33:27AM +0800, Yang Yingliang wrote:
>> If kset_register() fails in kset_create_and_add(), the name allocated
>> in kset_create() will be leaked.
> How is kset_create_and_add() failing?  Is this in a real kernel, or
> created with a fake fault injection?
Inject fault while probing module qemu_fw_cfg, kset_create_and_add() may 
fail.

Thanks,
Yang
>
> thanks,
>
> greg k-h
> .
  
Greg KH Oct. 17, 2022, 8:49 a.m. UTC | #3
On Mon, Oct 17, 2022 at 04:13:03PM +0800, Yang Yingliang wrote:
> Hi,
> 
> On 2022/10/17 12:51, Greg KH wrote:
> > On Mon, Oct 17, 2022 at 10:33:27AM +0800, Yang Yingliang wrote:
> > > If kset_register() fails in kset_create_and_add(), the name allocated
> > > in kset_create() will be leaked.
> > How is kset_create_and_add() failing?  Is this in a real kernel, or
> > created with a fake fault injection?
> Inject fault while probing module qemu_fw_cfg, kset_create_and_add() may
> fail.

Ah good, it's never being hit in a real situation.  The next time you
submit patches that are found like this, please include this type of
information.

thanks,

greg k-h
  
Yang Yingliang Oct. 17, 2022, 9:01 a.m. UTC | #4
On 2022/10/17 16:49, Greg KH wrote:
> On Mon, Oct 17, 2022 at 04:13:03PM +0800, Yang Yingliang wrote:
>> Hi,
>>
>> On 2022/10/17 12:51, Greg KH wrote:
>>> On Mon, Oct 17, 2022 at 10:33:27AM +0800, Yang Yingliang wrote:
>>>> If kset_register() fails in kset_create_and_add(), the name allocated
>>>> in kset_create() will be leaked.
>>> How is kset_create_and_add() failing?  Is this in a real kernel, or
>>> created with a fake fault injection?
>> Inject fault while probing module qemu_fw_cfg, kset_create_and_add() may
>> fail.
> Ah good, it's never being hit in a real situation.  The next time you
> submit patches that are found like this, please include this type of
> information.
OK. Do I need to send a v2 with commit message update.

Thanks,
Yang
>
> thanks,
>
> greg k-h
> .
  
Greg KH Oct. 17, 2022, 9:08 a.m. UTC | #5
On Mon, Oct 17, 2022 at 05:01:04PM +0800, Yang Yingliang wrote:
> 
> On 2022/10/17 16:49, Greg KH wrote:
> > On Mon, Oct 17, 2022 at 04:13:03PM +0800, Yang Yingliang wrote:
> > > Hi,
> > > 
> > > On 2022/10/17 12:51, Greg KH wrote:
> > > > On Mon, Oct 17, 2022 at 10:33:27AM +0800, Yang Yingliang wrote:
> > > > > If kset_register() fails in kset_create_and_add(), the name allocated
> > > > > in kset_create() will be leaked.
> > > > How is kset_create_and_add() failing?  Is this in a real kernel, or
> > > > created with a fake fault injection?
> > > Inject fault while probing module qemu_fw_cfg, kset_create_and_add() may
> > > fail.
> > Ah good, it's never being hit in a real situation.  The next time you
> > submit patches that are found like this, please include this type of
> > information.
> OK. Do I need to send a v2 with commit message update.

That would be wonderful for you to do, thank you!

Also do the same thing for the other patches you sent that fix up error
paths like this.

thanks,

greg k-h
  

Patch

diff --git a/lib/kobject.c b/lib/kobject.c
index a0b2dbfcfa23..f5e943c9027b 100644
--- a/lib/kobject.c
+++ b/lib/kobject.c
@@ -982,7 +982,7 @@  struct kset *kset_create_and_add(const char *name,
 		return NULL;
 	error = kset_register(kset);
 	if (error) {
-		kfree(kset);
+		kset_put(kset);
 		return NULL;
 	}
 	return kset;