diff options
author | Gui Hecheng <guihc.fnst@cn.fujitsu.com> | 2013-09-05 10:38:55 +0800 |
---|---|---|
committer | Chris Mason <chris.mason@fusionio.com> | 2013-10-16 08:20:42 -0400 |
commit | 28abed7b0fc214410f43f428e467c5f26be85755 (patch) | |
tree | a7fa762a5806e693ece5ce657d41335fcde932b2 | |
parent | 0f2569b1266b0a6288013a81e4c93f4ac09fdb9b (diff) |
btrfs-progs: local variable memory freed
The local probe variable in is_ssd() freed upon unsuccessful return;
The local dir_head list in make_image() freed upon unsuccessful return.
Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
-rw-r--r-- | mkfs.c | 12 |
1 files changed, 11 insertions, 1 deletions
@@ -1020,6 +1020,8 @@ static int make_image(char *source_dir, struct btrfs_root *root, int out_fd) struct directory_name_entry dir_head; + struct directory_name_entry *dir_entry = NULL; + ret = lstat(source_dir, &root_st); if (ret) { fprintf(stderr, "unable to lstat the %s\n", source_dir); @@ -1039,6 +1041,12 @@ static int make_image(char *source_dir, struct btrfs_root *root, int out_fd) printf("Making image is completed.\n"); return 0; fail: + while (!list_empty(&dir_head.list)) { + dir_entry = list_entry(dir_head.list.next, + struct directory_name_entry, list); + list_del(&dir_entry->list); + free(dir_entry); + } fprintf(stderr, "Making image is aborted.\n"); return -1; } @@ -1158,8 +1166,10 @@ static int is_ssd(const char *file) /* Device number of this disk (possibly a partition) */ devno = blkid_probe_get_devno(probe); - if (!devno) + if (!devno) { + blkid_free_probe(probe); return 0; + } /* Get whole disk name (not full path) for this devno */ ret = blkid_devno_to_wholedisk(devno, |