[Virtio-fs] [PATCH 2/5] virtiofsd: fix memory leak on lo.source
Dr. David Alan Gilbert
dgilbert at redhat.com
Thu Jun 6 09:11:04 UTC 2019
* Liu Bo (bo.liu at linux.alibaba.com) wrote:
> valgrind reported that lo.source is leaked on quiting, but it was defined
> as (const char*) as it may point to a const string "/".
>
> This adds a check to free the allocated memory only.
>
> Signed-off-by: Liu Bo <bo.liu at linux.alibaba.com>
> ---
> contrib/virtiofsd/passthrough_ll.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/contrib/virtiofsd/passthrough_ll.c b/contrib/virtiofsd/passthrough_ll.c
> index b58708f..f348b16 100644
> --- a/contrib/virtiofsd/passthrough_ll.c
> +++ b/contrib/virtiofsd/passthrough_ll.c
> @@ -2217,6 +2217,7 @@ int main(int argc, char *argv[])
> };
> struct lo_map_elem *root_elem;
> int ret = -1;
> + bool free_source = false;
>
> /* Don't mask creation mode, kernel already did that */
> umask(0);
> @@ -2269,9 +2270,10 @@ int main(int argc, char *argv[])
> err(1, "failed to stat source (\"%s\")", lo.source);
> if (!S_ISDIR(stat.st_mode))
> errx(1, "source is not a directory");
> -
> + free_source = true;
> } else {
> lo.source = "/";
> + free_source = false;
An easier way is just to do lo.source = strdup("/")
and then we don't need the flag.
> }
> lo.root.is_symlink = false;
> if (!lo.timeout_set) {
> @@ -2333,5 +2335,8 @@ err_out1:
> if (lo.root.fd >= 0)
> close(lo.root.fd);
>
> + if (free_source)
> + free((char *)lo.source);
> +
> return ret ? 1 : 0;
> }
> --
> 1.8.3.1
>
> _______________________________________________
> Virtio-fs mailing list
> Virtio-fs at redhat.com
> https://www.redhat.com/mailman/listinfo/virtio-fs
--
Dr. David Alan Gilbert / dgilbert at redhat.com / Manchester, UK
More information about the Virtio-fs
mailing list