diff options
author | Karel Zak | 2018-03-20 12:52:16 +0100 |
---|---|---|
committer | Karel Zak | 2018-03-20 12:52:16 +0100 |
commit | b25f3c15c20e8161c515f13bf972cc4d5e0ab461 (patch) | |
tree | 06b0aa9f720ed66e849211a874cf7d900ca4b0fb | |
parent | libmount: make sure we deallocate on parse error (diff) | |
download | kernel-qcow2-util-linux-b25f3c15c20e8161c515f13bf972cc4d5e0ab461.tar.gz kernel-qcow2-util-linux-b25f3c15c20e8161c515f13bf972cc4d5e0ab461.tar.xz kernel-qcow2-util-linux-b25f3c15c20e8161c515f13bf972cc4d5e0ab461.zip |
libmount: deallocate on /proc/swaps parse error
Addresses: https://github.com/karelzak/util-linux/issues/596
Signed-off-by: Karel Zak <kzak@redhat.com>
-rw-r--r-- | libmount/src/tab_parse.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/libmount/src/tab_parse.c b/libmount/src/tab_parse.c index ba22ef4be..3ed84ebc2 100644 --- a/libmount/src/tab_parse.c +++ b/libmount/src/tab_parse.c @@ -187,7 +187,7 @@ static int mnt_parse_mountinfo_line(struct libmnt_fs *fs, char *s) fs->flags |= MNT_FS_KERNEL; fs->devno = makedev(maj, min); - /* remove "(deleted)" suffix */ + /* remove "\040(deleted)" suffix */ sz = strlen(fs->target); if (sz > PATH_DELETED_SUFFIX_SZ) { char *ptr = fs->target + (sz - PATH_DELETED_SUFFIX_SZ); @@ -318,9 +318,7 @@ static int mnt_parse_swaps_line(struct libmnt_fs *fs, char *s) fs->size = fsz; fs->usedsize = usz; - unmangle_string(src); - - /* remove "(deleted)" suffix */ + /* remove "\040(deleted)" suffix */ sz = strlen(src); if (sz > PATH_DELETED_SUFFIX_SZ) { char *p = src + (sz - PATH_DELETED_SUFFIX_SZ); @@ -328,15 +326,18 @@ static int mnt_parse_swaps_line(struct libmnt_fs *fs, char *s) *p = '\0'; } + unmangle_string(src); + rc = mnt_fs_set_source(fs, src); if (!rc) mnt_fs_set_fstype(fs, "swap"); - free(src); } else { DBG(TAB, ul_debug("tab parse error: [sscanf rc=%d]: '%s'", rc, s)); rc = -EINVAL; } + free(src); + return rc; } |