From 76fd1703699098d2e41c689cc33575d8815e13e4 Mon Sep 17 00:00:00 2001 From: eabdullin Date: Tue, 11 Nov 2025 21:54:14 +0000 Subject: [PATCH] import UBI e2fsprogs-1.47.1-4.el10 --- ...-dirsearch-dirent-buf-on-big-endian-.patch | 46 +++++++++++++++++++ e2fsprogs.spec | 10 +++- 2 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 0002-master-debugfs-byteswap-dirsearch-dirent-buf-on-big-endian-.patch diff --git a/0002-master-debugfs-byteswap-dirsearch-dirent-buf-on-big-endian-.patch b/0002-master-debugfs-byteswap-dirsearch-dirent-buf-on-big-endian-.patch new file mode 100644 index 0000000..19d6956 --- /dev/null +++ b/0002-master-debugfs-byteswap-dirsearch-dirent-buf-on-big-endian-.patch @@ -0,0 +1,46 @@ +From 4be42019388d76c933e3b2ea80284aaf5b8eaecb Mon Sep 17 00:00:00 2001 +From: Brian Foster +Date: Thu, 23 Jan 2025 08:52:11 -0500 +Subject: [PATCH] debugfs: byteswap dirsearch dirent buf on big endian systems + +fstests test ext4/048 fails on big endian systems due to broken +debugfs dirsearch functionality. On an s390x system and 4k block +size, the dirsearch command seems to hang indefinitely. On the same +system with a 1k block size, the command fails to locate an existing +entry and causes the test to fail due to unexpected results. + +The cause of the dirsearch failure is lack of byte swapping of the +on-disk (little endian) dirent buffer before attempting to iterate +entries in the given block. This leads to garbage record and name +length values, for example. To resolve this problem, byte swap the +directory buffer on big endian systems. + +Signed-off-by: Brian Foster +Reviewed-by: Darrick J. Wong +Link: https://lore.kernel.org/r/20250123135211.575895-1-bfoster@redhat.com +Signed-off-by: Theodore Ts'o +Signed-off-by: Pavel Reichl +--- + debugfs/htree.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/debugfs/htree.c b/debugfs/htree.c +index a1008150..4ea8f30b 100644 +--- a/debugfs/htree.c ++++ b/debugfs/htree.c +@@ -482,6 +482,12 @@ static int search_dir_block(ext2_filsys fs, blk64_t *blocknr, + return BLOCK_ABORT; + } + ++#ifdef WORDS_BIGENDIAN ++ errcode = ext2fs_dirent_swab_in(fs, p->buf, 0); ++ if (errcode) ++ return BLOCK_ABORT; ++#endif ++ + while (offset < fs->blocksize) { + dirent = (struct ext2_dir_entry *) (p->buf + offset); + errcode = ext2fs_get_rec_len(fs, dirent, &rec_len); +-- +2.50.0 + diff --git a/e2fsprogs.spec b/e2fsprogs.spec index 663f418..a504611 100644 --- a/e2fsprogs.spec +++ b/e2fsprogs.spec @@ -1,7 +1,7 @@ Summary: Utilities for managing ext2, ext3, and ext4 file systems Name: e2fsprogs Version: 1.47.1 -Release: 3%{?dist} +Release: 4%{?dist} # License tags based on COPYING file distinctions for various components License: GPLv2 @@ -39,6 +39,7 @@ BuildRequires: make BuildRequires: gnupg2 xz Patch0: rhelonly-metadata_csum_orphan_file_off.patch +Patch1: 0002-master-debugfs-byteswap-dirsearch-dirent-buf-on-big-endian-.patch %description The e2fsprogs package contains a number of utilities for creating, @@ -168,7 +169,8 @@ managed device with some free space available in respective volume group. xzcat '%{SOURCE0}' | %{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data=- %setup -q -%patch0 -p1 +%patch -p1 0 +%patch -p1 1 # Remove flawed tests rm -rf tests/m_rootdir_acl @@ -338,6 +340,10 @@ make PRINT_FAILED=yes fullcheck %{_udevdir}/96-e2scrub.rules %changelog +* Tue Jun 24 2025 Pavel Reichl - 1.47.1-4 +- debugfs: byteswap dirsearch dirent buf on big endian systems + Resolves: RHEL-74431 + * Tue Oct 29 2024 Troy Dawson - 1.47.1-3 - Bump release for October 2024 mass rebuild: Resolves: RHEL-64018