From 636054bca9b6e5ffd1032e224a6dcc62925d4e0e Mon Sep 17 00:00:00 2001 From: hifi521 <1067551775@qq.com> Date: Fri, 20 May 2022 01:38:02 +0000 Subject: [PATCH] e2fsck: handle->level is overflow in ext2fs_extent_get. Fix issue: https://gitee.com/src-openeuler/e2fsprogs/issues/I4Z2KL Signed-off-by: zhanchengbin (cherry picked from commit 7c66cdaba9d013861449045586b2a9644e955f1e) --- ...vel-is-overflow-in-ext2fs_extent_get.patch | 74 +++++++++++++++++++ e2fsprogs.spec | 6 +- 2 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 0014-e2fsck-handle-level-is-overflow-in-ext2fs_extent_get.patch diff --git a/0014-e2fsck-handle-level-is-overflow-in-ext2fs_extent_get.patch b/0014-e2fsck-handle-level-is-overflow-in-ext2fs_extent_get.patch new file mode 100644 index 0000000..2ee5d1d --- /dev/null +++ b/0014-e2fsck-handle-level-is-overflow-in-ext2fs_extent_get.patch @@ -0,0 +1,74 @@ +From 508b1b57f73a49effc975731f8b76325d45b0e0f Mon Sep 17 00:00:00 2001 +From: zhanchengbin +Date: Fri, 18 Mar 2022 00:02:50 +0800 +Subject: [PATCH] e2fsck: handle->level is overflow in ext2fs_extent_get. + +In function check_blocks_extents, program call scan_extent_node recursively until +leaf extent is found, and if this leaf extent is the last one in this extent_idx, +it will delete the parent extent_idx of this leaf extent in ext2fs_extent_delete, +and do handle->level--. After scan_extent_node return, program allways to get up extent, +but level was already decreased. +So calling ext2fs_extent_get(EXT2_EXTENT_UP) again will return EXT2_ET_EXTENT_NO_UP, +and then print failed. + +Signed-off-by: zhanchengbin +--- + e2fsck/pass1.c | 7 +++++++ + lib/ext2fs/ext2fs.h | 1 + + lib/ext2fs/extent.c | 5 +++++ + 3 files changed, 13 insertions(+) + +diff --git a/e2fsck/pass1.c b/e2fsck/pass1.c +index 26b9ab71..3d698934 100644 +--- a/e2fsck/pass1.c ++++ b/e2fsck/pass1.c +@@ -3074,11 +3074,18 @@ report_problem: + } + } + } ++ ++ int level_bak = ext2fs_current_level_get(ehandle); ++ + scan_extent_node(ctx, pctx, pb, extent.e_lblk, + last_lblk, eof_block, ehandle, + next_try_repairs); + if (pctx->errcode) + return; ++ ++ if (level_bak != ext2fs_current_level_get(ehandle)) ++ return; ++ + pctx->errcode = ext2fs_extent_get(ehandle, + EXT2_EXTENT_UP, &extent); + if (pctx->errcode) { +diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h +index 68f9c1fe..d0468f11 100644 +--- a/lib/ext2fs/ext2fs.h ++++ b/lib/ext2fs/ext2fs.h +@@ -1333,6 +1333,7 @@ extern errcode_t ext2fs_extent_open2(ext2_filsys fs, ext2_ino_t ino, + extern void ext2fs_extent_free(ext2_extent_handle_t handle); + extern errcode_t ext2fs_extent_get(ext2_extent_handle_t handle, + int flags, struct ext2fs_extent *extent); ++extern int ext2fs_current_level_get(ext2_extent_handle_t handle); + extern errcode_t ext2fs_extent_node_split(ext2_extent_handle_t handle); + extern errcode_t ext2fs_extent_replace(ext2_extent_handle_t handle, int flags, + struct ext2fs_extent *extent); +diff --git a/lib/ext2fs/extent.c b/lib/ext2fs/extent.c +index b324c7b0..07acd4e0 100644 +--- a/lib/ext2fs/extent.c ++++ b/lib/ext2fs/extent.c +@@ -575,6 +575,11 @@ retry: + return 0; + } + ++int ext2fs_current_level_get(ext2_extent_handle_t handle) ++{ ++ return handle->level; ++} ++ + static errcode_t update_path(ext2_extent_handle_t handle) + { + blk64_t blk; +-- +2.27.0 + diff --git a/e2fsprogs.spec b/e2fsprogs.spec index a71f134..8354ba2 100644 --- a/e2fsprogs.spec +++ b/e2fsprogs.spec @@ -1,6 +1,6 @@ Name: e2fsprogs Version: 1.46.4 -Release: 8 +Release: 9 Summary: Second extended file system management tools License: GPLv2+ and LGPLv2 and MIT URL: http://e2fsprogs.sourceforge.net/ @@ -19,6 +19,7 @@ Patch10: 0010-tests-update-expect-file-for-u_direct_io.patch Patch11: 0011-libext2fs-don-t-old-the-CACHE_MTX-while-doing-I-O.patch Patch12: 0012-tests-skip-m_rootdir_acl-if-selinux-is-not-disabled.patch Patch13: 0013-e2fsck-do-not-clean-up-file-acl-if-the-inode-is-trun.patch +Patch14: 0014-e2fsck-handle-level-is-overflow-in-ext2fs_extent_get.patch BuildRequires: gcc pkgconfig texinfo @@ -141,6 +142,9 @@ exit 0 %{_mandir}/man8/* %changelog +* Fri May 20 2022 zhanchengbin - 1.46.4-9 +- e2fsck: handle->level is overflow in ext2fs_extent_get. + * Wed May 18 2022 zhanchengbin - 1.46.4-8 - e2fsck: do not clean up file acl if the inode is truncating type -- Gitee