]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
f2fs: fix infinite loop in __insert_extent_tree()
authorwangzijie <wangzijie1@honor.com>
Wed, 17 Sep 2025 02:36:22 +0000 (10:36 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Wed, 17 Sep 2025 16:00:18 +0000 (16:00 +0000)
When we get wrong extent info data, and look up extent_node in rb tree,
it will cause infinite loop (CONFIG_F2FS_CHECK_FS=n). Avoiding this by
return NULL and print some kernel messages in that case.

Signed-off-by: wangzijie <wangzijie1@honor.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/extent_cache.c

index 199c1e7a83ef3cff6ea40083ae18e67951ffdf34..ba0a07bfd346380458101b0f92b3e00245468fdc 100644 (file)
@@ -604,7 +604,13 @@ static struct extent_node *__insert_extent_tree(struct f2fs_sb_info *sbi,
                        p = &(*p)->rb_right;
                        leftmost = false;
                } else {
+                       f2fs_err_ratelimited(sbi, "%s: corrupted extent, type: %d, "
+                               "extent node in rb tree [%u, %u, %u], age [%llu, %llu], "
+                               "extent node to insert [%u, %u, %u], age [%llu, %llu]",
+                               __func__, et->type, en->ei.fofs, en->ei.blk, en->ei.len, en->ei.age,
+                               en->ei.last_blocks, ei->fofs, ei->blk, ei->len, ei->age, ei->last_blocks);
                        f2fs_bug_on(sbi, 1);
+                       return NULL;
                }
        }