ext4: Fix memory leak in case of failure
temp_ptr should always be freed, even if the function is left via goto fail. Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de> Reviewed-by: Lukasz Majewski <l.majewski@samsung.com>
This commit is contained in:
parent
0ceef3d371
commit
87a40b6e03
@ -974,7 +974,6 @@ int ext4fs_write(const char *fname, unsigned char *buffer,
|
|||||||
sizeof(struct ext2_inode));
|
sizeof(struct ext2_inode));
|
||||||
if (ext4fs_put_metadata(temp_ptr, parent_itable_blkno))
|
if (ext4fs_put_metadata(temp_ptr, parent_itable_blkno))
|
||||||
goto fail;
|
goto fail;
|
||||||
free(temp_ptr);
|
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* If parent and child fall in same inode table block
|
* If parent and child fall in same inode table block
|
||||||
@ -985,7 +984,6 @@ int ext4fs_write(const char *fname, unsigned char *buffer,
|
|||||||
gd_index--;
|
gd_index--;
|
||||||
if (ext4fs_put_metadata(temp_ptr, itable_blkno))
|
if (ext4fs_put_metadata(temp_ptr, itable_blkno))
|
||||||
goto fail;
|
goto fail;
|
||||||
free(temp_ptr);
|
|
||||||
}
|
}
|
||||||
ext4fs_update();
|
ext4fs_update();
|
||||||
ext4fs_deinit();
|
ext4fs_deinit();
|
||||||
@ -996,6 +994,7 @@ int ext4fs_write(const char *fname, unsigned char *buffer,
|
|||||||
fs->curr_inode_no = 0;
|
fs->curr_inode_no = 0;
|
||||||
free(inode_buffer);
|
free(inode_buffer);
|
||||||
free(g_parent_inode);
|
free(g_parent_inode);
|
||||||
|
free(temp_ptr);
|
||||||
g_parent_inode = NULL;
|
g_parent_inode = NULL;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -1003,6 +1002,7 @@ fail:
|
|||||||
ext4fs_deinit();
|
ext4fs_deinit();
|
||||||
free(inode_buffer);
|
free(inode_buffer);
|
||||||
free(g_parent_inode);
|
free(g_parent_inode);
|
||||||
|
free(temp_ptr);
|
||||||
g_parent_inode = NULL;
|
g_parent_inode = NULL;
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
|
Loading…
Reference in New Issue
Block a user