summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorStephen Warren <swarren@nvidia.com>2015-09-04 22:03:44 -0600
committerTom Rini <trini@konsulko.com>2015-09-11 17:15:22 -0400
commit934b14f2bb306dfa1947d30f4df90cdc8b710332 (patch)
tree3bd473e3222c29442e5b805be80904b6265c9836 /fs
parent676505f5ce6c621d8c28958d600dcf92bcf76574 (diff)
downloadu-boot-934b14f2bb306dfa1947d30f4df90cdc8b710332.tar.gz
ext4: free allocations by parse_path()
parse_path() malloc()s the entries in the array it's passed. Those allocations must be free()d by the caller, ext4fs_get_parent_inode_num(). Add code to do this. For this to work, all the array entries must be dynamically allocated, rather than a mix of dynamic and static allocations. Fix parse_path() not to over-write arr[0] with a pointer to statically allocated data. Signed-off-by: Stephen Warren <swarren@nvidia.com> Acked-by: Lukasz Majewski <l.majewski@samsung.com> Tested-by: Lukasz Majewski <l.majewski@samsung.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/ext4/ext4_common.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/fs/ext4/ext4_common.c b/fs/ext4/ext4_common.c
index c77e22d477..9fdbfe6e2d 100644
--- a/fs/ext4/ext4_common.c
+++ b/fs/ext4/ext4_common.c
@@ -615,8 +615,7 @@ static int parse_path(char **arr, char *dirname)
arr[i] = zalloc(strlen("/") + 1);
if (!arr[i])
return -ENOMEM;
-
- arr[i++] = "/";
+ memcpy(arr[i++], "/", strlen("/"));
/* add each path entry after root */
while (token != NULL) {
@@ -746,6 +745,11 @@ end:
fail:
free(depth_dirname);
free(parse_dirname);
+ for (i = 0; i < depth; i++) {
+ if (!ptr[i])
+ break;
+ free(ptr[i]);
+ }
free(ptr);
free(parent_inode);
free(first_inode);