aboutsummaryrefslogtreecommitdiff
path: root/sys/fs/ext2fs
diff options
context:
space:
mode:
authorPedro F. Giffuni <pfg@FreeBSD.org>2022-12-17 18:19:51 +0000
committerPedro F. Giffuni <pfg@FreeBSD.org>2022-12-17 18:19:51 +0000
commit38389acc59fcb014c5c9beed06a6f13835808b89 (patch)
tree0cbc662bae3f82f6fddddebb6776745cbf5de2dc /sys/fs/ext2fs
parent4d903a1a74d9526aba4d177e89c10f97df5662f2 (diff)
downloadsrc-38389acc59fcb014c5c9beed06a6f13835808b89.tar.gz
src-38389acc59fcb014c5c9beed06a6f13835808b89.zip
ext2fs: fix potential memory leak in ext4_ext_grow_indepth()
PR: 265071
Diffstat (limited to 'sys/fs/ext2fs')
-rw-r--r--sys/fs/ext2fs/ext2_extents.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/fs/ext2fs/ext2_extents.c b/sys/fs/ext2fs/ext2_extents.c
index 3d24db4b396b..17ae8655cddc 100644
--- a/sys/fs/ext2fs/ext2_extents.c
+++ b/sys/fs/ext2fs/ext2_extents.c
@@ -1099,8 +1099,10 @@ ext4_ext_grow_indepth(struct inode *ip, struct ext4_extent_path *path,
return (error);
bp = getblk(ip->i_devvp, fsbtodb(fs, newblk), fs->e2fs_bsize, 0, 0, 0);
- if (!bp)
+ if (!bp) {
+ ext4_ext_blkfree(ip, newblk, 1, 0);
return (EIO);
+ }
/* Move top-level index/leaf into new block. */
memmove(bp->b_data, curpath->ep_header, sizeof(ip->i_data));
@@ -1116,8 +1118,10 @@ ext4_ext_grow_indepth(struct inode *ip, struct ext4_extent_path *path,
ext2_extent_blk_csum_set(ip, bp->b_data);
error = bwrite(bp);
- if (error)
+ if (error) {
+ ext4_ext_blkfree(ip, newblk, 1, 0);
goto out;
+ }
bp = NULL;