summaryrefslogtreecommitdiffstats
path: root/misc-utils/findmnt.c
diff options
context:
space:
mode:
authorKarel Zak2015-01-29 11:59:54 +0100
committerKarel Zak2015-01-29 11:59:54 +0100
commit4631e25427df6f501dc2ae67002bd3841d2899b8 (patch)
tree4aba3ed1e6f6d01775f137ba21e1b2315053e941 /misc-utils/findmnt.c
parentutmpdump: don't pass parameter of type "struct utmp" by value [coverity scan] (diff)
downloadkernel-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.c26
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: