From: Jiasheng Jiang Date: Sun, 11 Jan 2026 19:20:37 +0000 (+0000) Subject: btrfs: fix memory leaks in create_space_info() error paths X-Git-Tag: v6.12.67~110 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bb4fa4c0b54aae25e55faeda7f78d0c11b8cd618;p=thirdparty%2Fkernel%2Fstable.git btrfs: fix memory leaks in create_space_info() error paths [ Upstream commit a11224a016d6d1d46a4d9b6573244448a80d4d7f ] In create_space_info(), the 'space_info' object is allocated at the beginning of the function. However, there are two error paths where the function returns an error code without freeing the allocated memory: 1. When create_space_info_sub_group() fails in zoned mode. 2. When btrfs_sysfs_add_space_info_type() fails. In both cases, 'space_info' has not yet been added to the fs_info->space_info list, resulting in a memory leak. Fix this by adding an error handling label to kfree(space_info) before returning. Fixes: 2be12ef79fe9 ("btrfs: Separate space_info create/update") Reviewed-by: Qu Wenruo Signed-off-by: Jiasheng Jiang Signed-off-by: David Sterba Signed-off-by: Sasha Levin --- diff --git a/fs/btrfs/space-info.c b/fs/btrfs/space-info.c index 9d47678875b7..b2c90696b86b 100644 --- a/fs/btrfs/space-info.c +++ b/fs/btrfs/space-info.c @@ -291,18 +291,22 @@ static int create_space_info(struct btrfs_fs_info *info, u64 flags) BTRFS_SUB_GROUP_DATA_RELOC, 0); if (ret) - return ret; + goto out_free; } ret = btrfs_sysfs_add_space_info_type(info, space_info); if (ret) - return ret; + goto out_free; list_add(&space_info->list, &info->space_info); if (flags & BTRFS_BLOCK_GROUP_DATA) info->data_sinfo = space_info; return ret; + +out_free: + kfree(space_info); + return ret; } int btrfs_init_space_info(struct btrfs_fs_info *fs_info)