lkml.org 
[lkml]   [2021]   [Jan]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: [PATCH] gpiolib: free device name on error path to fix kmemleak
From
Date
Hi Andy,

On 1/30/21 1:26 AM, Andy Shevchenko wrote:
> On Fri, Jan 29, 2021 at 2:01 PM <quanyang.wang@windriver.com> wrote:
>> From: Quanyang Wang <quanyang.wang@windriver.com>
>>
>> In gpiochip_add_data_with_key, we should check the return value of
>> dev_set_name to ensure that device name is allocated successfully
>> and then add a label on the error path to free device name to fix
>> kmemleak as below:
> Thanks for the report.
> Unfortunately...
>
>> + ret = dev_set_name(&gdev->dev, GPIOCHIP_NAME "%d", gdev->id);
>> + if (ret)
>> + goto err_free_ida;
> ...
>
>> +err_free_dev_name:
>> + kfree(dev_name(&gdev->dev));
> ...this approach seems to create a possible double free if I'm not mistaken.
Thanks for your comment.  I didn't catch the double free. Would you
please point it out?
>
> The idea is that device name should be cleaned in kobject ->release()
> callback when device is put.

Yes, the device name should be freed by calling put_device(&gdev->dev).
But int gpiochip_add_data_with_key,

when running dev_set_name, "gdev->dev.release" hasn't been installed
until in the tail of gpiochip_add_data_with_key.

So we couldn't call put_device here.

Any suggestion is much appreciated.

Thanks,

Quanyang

> Can you elaborate?
>

\
 
 \ /
  Last update: 2021-01-30 05:44    [W:0.062 / U:0.600 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site