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]

 



пн, 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