]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ext4: fix memory leak in ext4_ext_shift_extents()
authorZilin Guan <zilin@seu.edu.cn>
Thu, 25 Dec 2025 08:48:00 +0000 (08:48 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 26 Feb 2026 23:01:39 +0000 (15:01 -0800)
commit ca81109d4a8f192dc1cbad4a1ee25246363c2833 upstream.

In ext4_ext_shift_extents(), if the extent is NULL in the while loop, the
function returns immediately without releasing the path obtained via
ext4_find_extent(), leading to a memory leak.

Fix this by jumping to the out label to ensure the path is properly
released.

Fixes: a18ed359bdddc ("ext4: always check ext4_ext_find_extent result")
Signed-off-by: Zilin Guan <zilin@seu.edu.cn>
Reviewed-by: Zhang Yi <yi.zhang@huawei.com>
Reviewed-by: Baokun Li <libaokun1@huawei.com>
Link: https://patch.msgid.link/20251225084800.905701-1-zilin@seu.edu.cn
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Cc: stable@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/ext4/extents.c

index fb3ebfac1b33d1e479c8ed6cb0453de2fb5f21fe..18b39eed7526706f217aa1b0bb5c0fb4b32a6db9 100644 (file)
@@ -5414,7 +5414,8 @@ again:
                if (!extent) {
                        EXT4_ERROR_INODE(inode, "unexpected hole at %lu",
                                         (unsigned long) *iterator);
-                       return -EFSCORRUPTED;
+                       ret = -EFSCORRUPTED;
+                       goto out;
                }
                if (SHIFT == SHIFT_LEFT && *iterator >
                    le32_to_cpu(extent->ee_block)) {