diff options
author | Karel Zak | 2015-01-29 11:59:54 +0100 |
---|---|---|
committer | Karel Zak | 2015-01-29 11:59:54 +0100 |
commit | 4631e25427df6f501dc2ae67002bd3841d2899b8 (patch) | |
tree | 4aba3ed1e6f6d01775f137ba21e1b2315053e941 /misc-utils/findmnt.c | |
parent | utmpdump: don't pass parameter of type "struct utmp" by value [coverity scan] (diff) | |
download | kernel-qcow2-util-linux-4631e25427df6f501dc2ae67002bd3841d2899b8.tar.gz kernel-qcow2-util-linux-4631e25427df6f501dc2ae67002bd3841d2899b8.tar.xz kernel-qcow2-util-linux-4631e25427df6f501dc2ae67002bd3841d2899b8.zip |
findmnt: fix mem leaks [coverity scan]
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'misc-utils/findmnt.c')
-rw-r--r-- | misc-utils/findmnt.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/misc-utils/findmnt.c b/misc-utils/findmnt.c index 9d1f298af..423d38422 100644 --- a/misc-utils/findmnt.c +++ b/misc-utils/findmnt.c @@ -261,26 +261,29 @@ static void set_source_match(const char *data) static void enable_extra_target_match(void) { - const char *cn = NULL, *mnt = NULL; + char *cn = NULL, *mnt = NULL; + const char *tgt = NULL; /* * Check if match pattern is mountpoint, if not use the * real mountpoint. */ if (flags & FL_NOCACHE) - cn = get_match(COL_TARGET); + tgt = get_match(COL_TARGET); else { - cn = mnt_resolve_path(get_match(COL_TARGET), cache); + tgt = cn = mnt_resolve_path(get_match(COL_TARGET), cache); if (!cn) return; } - mnt = mnt_get_mountpoint(cn); - if (!mnt || strcmp(mnt, cn) == 0) - return; + mnt = mnt_get_mountpoint(tgt); + if (mnt && strcmp(mnt, tgt) != 0) + set_match(COL_TARGET, mnt); /* replace the current setting */ + else + free(mnt); - /* replace the current setting with the real mountpoint */ - set_match(COL_TARGET, mnt); + if (!cache) + free(cn); } @@ -526,19 +529,22 @@ static char *get_data(struct libmnt_fs *fs, int num) { const char *root = mnt_fs_get_root(fs); const char *spec = mnt_fs_get_srcpath(fs); + char *cn = NULL; if (spec && (flags & FL_CANONICALIZE)) - spec = mnt_resolve_path(spec, cache); + spec = cn = mnt_resolve_path(spec, cache); if (!spec) { spec = mnt_fs_get_source(fs); if (spec && (flags & FL_EVALUATE)) - spec = mnt_resolve_spec(spec, cache); + spec = cn = mnt_resolve_spec(spec, cache); } if (root && spec && !(flags & FL_NOFSROOT) && strcmp(root, "/")) xasprintf(&str, "%s[%s]", spec, root); else if (spec) str = xstrdup(spec); + if (!cache) + free(cn); break; } case COL_TARGET: |