forked from tytso/e2fsprogs-inline-patch-queue
-
Notifications
You must be signed in to change notification settings - Fork 0
/
28-libext2fs-xattr-fix-memory-leaks.patch
44 lines (37 loc) · 1.31 KB
/
28-libext2fs-xattr-fix-memory-leaks.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
From: Darrick J. Wong <darrick.wong@oracle.com>
libext2fs: fix memory leaks in extended attribute code
Fix some memory leaks and data disclosure problems in the extended
attribute writing code.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
diff --git a/lib/ext2fs/ext_attr.c b/lib/ext2fs/ext_attr.c
index 2fae516..94bc89b 100644
--- a/lib/ext2fs/ext_attr.c
+++ b/lib/ext2fs/ext_attr.c
@@ -364,7 +364,7 @@ static errcode_t prep_ea_block_for_write(ext2_filsys fs, ext2_ino_t ino,
/* Single-user block. We're done here. */
if (header->h_refcount == 1)
- return 0;
+ goto out2;
/* We need to CoW the block. */
header->h_refcount--;
@@ -384,10 +384,11 @@ static errcode_t prep_ea_block_for_write(ext2_filsys fs, ext2_ino_t ino,
goal = ext2fs_inode_table_loc(fs, grp);
err = ext2fs_alloc_block2(fs, goal, NULL, &blk);
if (err)
- return err;
+ goto out2;
ext2fs_file_acl_block_set(fs, (struct ext2_inode *)inode, blk);
out2:
- ext2fs_free_mem(&block_buf);
+ if (block_buf)
+ ext2fs_free_mem(&block_buf);
out:
return err;
}
@@ -505,7 +506,7 @@ errcode_t ext2fs_xattrs_write(struct ext2_xattr_handle *handle)
write_ea_block:
/* Write the EA block */
- err = ext2fs_get_mem(handle->fs->blocksize, &block_buf);
+ err = ext2fs_get_memzero(handle->fs->blocksize, &block_buf);
if (err)
goto out;