Re: [PATCH cifs-utils v2] mount.cifs.c: fix memory leaks in main func

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2019/8/8 5:44, Pavel Shilovsky wrote:
> Merged into "next" with one minor change - removed a trailing white
> space. Thanks.
> 
That is ok. Thank you very much.

> --
> Best regards,
> Pavel Shilovsky
> 
> вт, 6 авг. 2019 г. в 09:49, Pavel Shilovsky <piastryyy@xxxxxxxxx>:
> 
>>
>> пн, 5 авг. 2019 г. в 19:36, Zhiqiang Liu <liuzhiqiang26@xxxxxxxxxx>:
>>>
>>> From: Jiawen Liu <liujiawen10@xxxxxxxxxx>
>>>
>>> In mount.cifs module, orgoptions and mountpoint in the main func
>>> point to the memory allocated by func realpath and strndup respectively.
>>> However, they are not freed before the main func returns so that the
>>> memory leaks occurred.
>>>
>>> The memory leak problem is reported by LeakSanitizer tool.
>>> LeakSanitizer url: "https://github.com/google/sanitizers";
>>>
>>> Here I free the pointers orgoptions and mountpoint before main
>>> func returns.
>>>
>>> Fixes:7549ad5e7126 ("memory leaks: caused by func realpath and strndup")
>>> Signed-off-by: Jiawen Liu <liujiawen10@xxxxxxxxxx>
>>> Reported-by: Jin Du <dujin1@xxxxxxxxxx>
>>> Reviewed-by: Saisai Zhang <zhangsaisai@xxxxxxxxxx>
>>> Reviewed-by: Aurélien Aptel <aaptel@xxxxxxxx>
>>> ---
>>> v1->v2:
>>> - free orgoptions in main func as suggested by Aurélien Aptel
>>> - free mountpoint in acquire_mountpoint func as suggested by Aurélien Aptel
>>>
>>>  mount.cifs.c | 12 ++++++++++--
>>>  1 file changed, 10 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/mount.cifs.c b/mount.cifs.c
>>> index ae7a899..656d353 100644
>>> --- a/mount.cifs.c
>>> +++ b/mount.cifs.c
>>> @@ -1891,7 +1891,10 @@ restore_privs:
>>>                 uid_t __attribute__((unused)) uignore = setfsuid(oldfsuid);
>>>                 gid_t __attribute__((unused)) gignore = setfsgid(oldfsgid);
>>>         }
>>> -
>>> +
>>> +       if (rc) {
>>> +               free(*mountpointp);
>>> +       }
>>>         return rc;
>>>  }
>>>
>>> @@ -1994,8 +1997,10 @@ int main(int argc, char **argv)
>>>
>>>         /* chdir into mountpoint as soon as possible */
>>>         rc = acquire_mountpoint(&mountpoint);
>>> -       if (rc)
>>> +       if (rc) {
>>> +               free(orgoptions);
>>>                 return rc;
>>> +       }
>>>
>>>         /*
>>>          * mount.cifs does privilege separation. Most of the code to handle
>>> @@ -2014,6 +2019,8 @@ int main(int argc, char **argv)
>>>                 /* child */
>>>                 rc = assemble_mountinfo(parsed_info, thisprogram, mountpoint,
>>>                                         orig_dev, orgoptions);
>>> +               free(orgoptions);
>>> +               free(mountpoint);
>>>                 return rc;
>>>         } else {
>>>                 /* parent */
>>> @@ -2149,5 +2156,6 @@ mount_exit:
>>>         }
>>>         free(options);
>>>         free(orgoptions);
>>> +       free(mountpoint);
>>>         return rc;
>>>  }
>>> --
>>> 2.7.4
>>>
>>
>> Thanks for the patch! I will apply it to my github tree shortly.
>>
>> --
>> Best regards,
>> Pavel Shilovsky
> 
> .
> 




[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux