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 <[email protected]>
---
 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;
        }
        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

Reply via email to