import e2fsprogs-1.45.4-3.el8

This commit is contained in:
CentOS Sources 2020-04-23 22:07:34 +00:00 committed by Andrew Lukoshko
commit cf54d5c341
22 changed files with 3385 additions and 0 deletions

1
.e2fsprogs.metadata Normal file
View File

@ -0,0 +1 @@
4f2ac3a153c23d57968632e12c944eeb50613c51 SOURCES/e2fsprogs-1.45.4.tar.xz

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
SOURCES/e2fsprogs-1.45.4.tar.xz

View File

@ -0,0 +1,38 @@
From bb566b0efe6179a1aa2dac6e3c05a12f59eac8a3 Mon Sep 17 00:00:00 2001
From: Lukas Czerner <lczerner@redhat.com>
Date: Sun, 15 Dec 2019 12:42:28 +0100
Subject: [PATCH 2/2] Makefile.in: Disable e2scrub
e2scrub system is still new and we're not ready to support it yet, so
just disbale it and not even build it.
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
---
Makefile.in | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/Makefile.in b/Makefile.in
index b951c017..34e2048d 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -13,7 +13,6 @@ INSTALL = @INSTALL@
@DEBUGFS_CMT@DEBUGFS_DIR= debugfs
@UUID_CMT@UUID_LIB_SUBDIR= lib/uuid
@BLKID_CMT@BLKID_LIB_SUBDIR= lib/blkid
-@E2SCRUB_CMT@E2SCRUB_DIR= scrub
@ALL_CMT@SUPPORT_LIB_SUBDIR= lib/support
@ALL_CMT@E2P_LIB_SUBDIR= lib/e2p
@ALL_CMT@EXT2FS_LIB_SUBDIR= lib/ext2fs
@@ -21,8 +20,7 @@ INSTALL = @INSTALL@
LIB_SUBDIRS=lib/et lib/ss $(E2P_LIB_SUBDIR) $(UUID_LIB_SUBDIR) \
$(BLKID_LIB_SUBDIR) $(SUPPORT_LIB_SUBDIR) $(EXT2FS_LIB_SUBDIR) intl
-PROG_SUBDIRS=e2fsck $(DEBUGFS_DIR) misc $(RESIZE_DIR) tests/progs po \
- $(E2SCRUB_DIR)
+PROG_SUBDIRS=e2fsck $(DEBUGFS_DIR) misc $(RESIZE_DIR) tests/progs po
SUBDIRS=util $(LIB_SUBDIRS) $(PROG_SUBDIRS) tests
--
2.21.0

View File

@ -0,0 +1,45 @@
From 6499a3eef9583d893a442372e1567d74ce5a045b Mon Sep 17 00:00:00 2001
From: Lukas Czerner <lczerner@redhat.com>
Date: Sun, 15 Dec 2019 14:39:46 +0100
Subject: [PATCH] Revert "fuse2fs: install fuse2fs in /usr/bin instead of
/usr/sbin"
This reverts commit b71150355dca5409cf8e82a7e715e459a795bbf8.
---
debian/fuse2fs.install | 2 +-
misc/Makefile.in | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/debian/fuse2fs.install b/debian/fuse2fs.install
index 2ed4c3c0..cd37a70e 100644
--- a/debian/fuse2fs.install
+++ b/debian/fuse2fs.install
@@ -1,2 +1,2 @@
-/usr/bin/fuse2fs
+/usr/sbin/fuse2fs
/usr/share/man/man1/fuse2fs.1
diff --git a/misc/Makefile.in b/misc/Makefile.in
index f2554446..22c98489 100644
--- a/misc/Makefile.in
+++ b/misc/Makefile.in
@@ -35,7 +35,7 @@ INSTALL = @INSTALL@
SPROGS= mke2fs badblocks tune2fs dumpe2fs $(BLKID_PROG) logsave \
$(E2IMAGE_PROG) @FSCK_PROG@ e2undo
USPROGS= mklost+found filefrag e2freefrag $(UUIDD_PROG) \
- $(E4DEFRAG_PROG) $(E4CRYPT_PROG)
+ $(E4DEFRAG_PROG) $(E4CRYPT_PROG) $(FUSE_PROG)
SMANPAGES= tune2fs.8 mklost+found.8 mke2fs.8 dumpe2fs.8 badblocks.8 \
e2label.8 $(FINDFS_MAN) $(BLKID_MAN) $(E2IMAGE_MAN) \
logsave.8 filefrag.8 e2freefrag.8 e2undo.8 \
@@ -43,7 +43,7 @@ SMANPAGES= tune2fs.8 mklost+found.8 mke2fs.8 dumpe2fs.8 badblocks.8 \
e2mmpstatus.8
FMANPAGES= mke2fs.conf.5 ext4.5
-UPROGS= chattr lsattr $(FUSE_PROG) @UUID_CMT@ uuidgen
+UPROGS= chattr lsattr @UUID_CMT@ uuidgen
UMANPAGES= chattr.1 lsattr.1 @UUID_CMT@ uuidgen.1
UMANPAGES+= @FUSE_CMT@ fuse2fs.1
--
2.21.0

View File

@ -0,0 +1,133 @@
From e571c0f64fe02f09472a1011b3f129f94b3ec4ed Mon Sep 17 00:00:00 2001
From: Lukas Czerner <lczerner@redhat.com>
Date: Wed, 18 Dec 2019 11:03:37 +0100
Subject: [PATCH] man: Add note about RHEL8 supported features and mount
options
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
---
misc/ext4.5.in | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
misc/mke2fs.8.in | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 96 insertions(+)
diff --git a/misc/ext4.5.in b/misc/ext4.5.in
index 1db61a5f..39b1412e 100644
--- a/misc/ext4.5.in
+++ b/misc/ext4.5.in
@@ -19,6 +19,54 @@ previously intended for use with the ext2 and ext3 file systems can be
mounted using the ext4 file system driver, and indeed in many modern
Linux distributions, the ext4 file system driver has been configured
to handle mount requests for ext2 and ext3 file systems.
+.SH RED HAT ENTERPRISE LINUX 8
+The Ext4 file system is fully supported by Red Hat when using default
+mke2fs and mount options. In addition, the following non-default mke2fs
+features and mount options are also fully supported.
+.SH "Non-default features:"
+project
+.br
+quota
+.br
+mmp
+.br
+.SH "Non-default mount options:"
+bsddf|minixdf
+.br
+grpid|bsdgroups and nogrpid|sysvgroups
+.br
+resgid=n and resuid=n
+.br
+errors={continue|remount-ro|panic}
+.br
+commit=nrsec
+.br
+max_batch_time=usec
+.br
+min_batch_time=usec
+.br
+grpquota|noquota|quota|usrquota
+.br
+prjquota
+.br
+dax
+.br
+lazytime|nolazytime
+.br
+discard|nodiscard
+.br
+init_itable|noinit_itable
+.br
+jqfmt={vfsold|vfsv0|vfsv1}
+.br
+usrjquota=aquota.user|grpjquota=aquota.group
+.PP
+For more information on features and mount options, see the
+.BR ext4
+man page. Ext4 features and mount options not listed above may not be
+fully supported by Red Hat. If your workload requires a feature or mount
+option that is not fully in this Red Hat release, contact Red Hat support
+to evaluate it for inclusion in our supported list.
.SH FILE SYSTEM FEATURES
A file system formatted for ext2, ext3, or ext4 can have some
collection of the following file system feature flags enabled. Some of
diff --git a/misc/mke2fs.8.in b/misc/mke2fs.8.in
index 5bcee25e..8297bc5b 100644
--- a/misc/mke2fs.8.in
+++ b/misc/mke2fs.8.in
@@ -204,6 +204,54 @@ overridden by the options listed below, are controlled by the
configuration file. See the
.BR mke2fs.conf (5)
manual page for more details.
+.SH RED HAT ENTERPRISE LINUX 8
+The Ext4 file system is fully supported by Red Hat when using default
+mke2fs and mount options. In addition, the following non-default mke2fs
+features and mount options are also fully supported.
+.SH "Non-default features:"
+project
+.br
+quota
+.br
+mmp
+.br
+.SH "Non-default mount options:"
+bsddf|minixdf
+.br
+grpid|bsdgroups and nogrpid|sysvgroups
+.br
+resgid=n and resuid=n
+.br
+errors={continue|remount-ro|panic}
+.br
+commit=nrsec
+.br
+max_batch_time=usec
+.br
+min_batch_time=usec
+.br
+grpquota|noquota|quota|usrquota
+.br
+prjquota
+.br
+dax
+.br
+lazytime|nolazytime
+.br
+discard|nodiscard
+.br
+init_itable|noinit_itable
+.br
+jqfmt={vfsold|vfsv0|vfsv1}
+.br
+usrjquota=aquota.user|grpjquota=aquota.group
+.PP
+For more information on features and mount options, see the
+.BR ext4
+man page. Ext4 features and mount options not listed above may not be
+fully supported by Red Hat. If your workload requires a feature or mount
+option that is not fully in this Red Hat release, contact Red Hat support
+to evaluate it for inclusion in our supported list.
.SH OPTIONS
.TP
.BI \-b " block-size"
--
2.21.1

View File

@ -0,0 +1,27 @@
From 007d212c3f6c4942185e53a41011d11585827033 Mon Sep 17 00:00:00 2001
From: Lukas Czerner <lczerner@redhat.com>
Date: Sun, 15 Dec 2019 12:05:41 +0100
Subject: [PATCH 1/2] mke2fs.conf: Disable fname_encoding feature
It's still rather new and we do not feel ready supporting it at the
moment, so just disable it.
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
---
misc/mke2fs.conf.in | 3 ---
1 file changed, 3 deletions(-)
diff --git a/misc/mke2fs.conf.in b/misc/mke2fs.conf.in
index 00afd912..01e35cf8 100644
--- a/misc/mke2fs.conf.in
+++ b/misc/mke2fs.conf.in
@@ -45,6 +45,3 @@
blocksize = 4096
inode_size = 128
}
-
-[options]
- fname_encoding = utf8
--
2.21.0

View File

@ -0,0 +1,34 @@
From 541e51dcf19433838aba7de11e6f3f124e6ef4da Mon Sep 17 00:00:00 2001
From: Lukas Czerner <lczerner@redhat.com>
Date: Tue, 17 Dec 2019 11:24:31 +0100
Subject: [PATCH] mke2fs.conf: Introduce rhel6 and rhel7 fs_type
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
---
misc/mke2fs.conf.in | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/misc/mke2fs.conf.in b/misc/mke2fs.conf.in
index 01e35cf8..a533b210 100644
--- a/misc/mke2fs.conf.in
+++ b/misc/mke2fs.conf.in
@@ -14,6 +14,16 @@
features = has_journal,extent,huge_file,flex_bg,metadata_csum,64bit,dir_nlink,extra_isize
inode_size = 256
}
+ rhel6_ext4 = {
+ features = has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize
+ inode_size = 256
+ enable_periodic_fsck = 1
+ default_mntopts = ""
+ }
+ rhel7_ext4 = {
+ features = has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize,64bit
+ inode_size = 256
+ }
small = {
blocksize = 1024
inode_size = 128
--
2.21.1

View File

@ -0,0 +1,42 @@
From d7968909c6b503c3c96d36ae2a686b1b07308077 Mon Sep 17 00:00:00 2001
From: Theodore Ts'o <tytso@mit.edu>
Date: Mon, 4 Nov 2019 21:22:54 -0500
Subject: [PATCH 03/10] Fix UBSan when shifting (1LL << 63)
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
---
lib/ext2fs/qcow2.h | 4 ++--
misc/e2image.c | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/lib/ext2fs/qcow2.h b/lib/ext2fs/qcow2.h
index 5576348a..b649c9cf 100644
--- a/lib/ext2fs/qcow2.h
+++ b/lib/ext2fs/qcow2.h
@@ -30,8 +30,8 @@
#define QCOW_MAGIC (('Q' << 24) | ('F' << 16) | ('I' << 8) | 0xfb)
#define QCOW_VERSION 2
-#define QCOW_OFLAG_COPIED (1LL << 63)
-#define QCOW_OFLAG_COMPRESSED (1LL << 62)
+#define QCOW_OFLAG_COPIED (1ULL << 63)
+#define QCOW_OFLAG_COMPRESSED (1ULL << 62)
#define QCOW_COMPRESSED 1
#define QCOW_ENCRYPTED 2
diff --git a/misc/e2image.c b/misc/e2image.c
index 3c881fee..30f25432 100644
--- a/misc/e2image.c
+++ b/misc/e2image.c
@@ -54,7 +54,7 @@ extern int optind;
#include "support/plausible.h"
#include "../version.h"
-#define QCOW_OFLAG_COPIED (1LL << 63)
+#define QCOW_OFLAG_COPIED (1ULL << 63)
#define NO_BLK ((blk64_t) -1)
/* Image types */
--
2.21.1

View File

@ -0,0 +1,86 @@
From cff7039936d361a0ab1d76ef0c12b681f3be9172 Mon Sep 17 00:00:00 2001
From: Lukas Czerner <lczerner@redhat.com>
Date: Tue, 14 Jan 2020 09:49:31 +0100
Subject: [PATCH 2/2] Revert "libext2fs: hide struct ext2fs_hashmap as an
internal implementation detail"
This reverts commit ef54444e6d1da4b464c11e749c9643ed945a770b
because it breaks ABI.
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
---
lib/ext2fs/hashmap.c | 16 ----------------
lib/ext2fs/hashmap.h | 30 +++++++++++++++++++++---------
2 files changed, 21 insertions(+), 25 deletions(-)
diff --git a/lib/ext2fs/hashmap.c b/lib/ext2fs/hashmap.c
index ffe61ce9..3d8ee814 100644
--- a/lib/ext2fs/hashmap.c
+++ b/lib/ext2fs/hashmap.c
@@ -1,22 +1,6 @@
#include "hashmap.h"
#include <string.h>
-struct ext2fs_hashmap {
- uint32_t size;
- uint32_t(*hash)(const void *key, size_t len);
- void(*free)(void*);
- struct ext2fs_hashmap_entry *first;
- struct ext2fs_hashmap_entry *last;
-#if __GNUC_PREREQ (4, 8)
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wpedantic"
-#endif
- struct ext2fs_hashmap_entry *entries[0];
-#if __GNUC_PREREQ (4, 8)
-#pragma GCC diagnostic pop
-#endif
-};
-
uint32_t ext2fs_djb2_hash(const void *str, size_t size)
{
int c;
diff --git a/lib/ext2fs/hashmap.h b/lib/ext2fs/hashmap.h
index dcfa7455..656d3d90 100644
--- a/lib/ext2fs/hashmap.h
+++ b/lib/ext2fs/hashmap.h
@@ -13,15 +13,27 @@
#endif
#endif
-struct ext2fs_hashmap;
-
-struct ext2fs_hashmap_entry {
- void *data;
- const void *key;
- size_t key_len;
- struct ext2fs_hashmap_entry *next;
- struct ext2fs_hashmap_entry *list_next;
- struct ext2fs_hashmap_entry *list_prev;
+struct ext2fs_hashmap {
+ uint32_t size;
+ uint32_t(*hash)(const void *key, size_t len);
+ void(*free)(void*);
+ struct ext2fs_hashmap_entry *first;
+ struct ext2fs_hashmap_entry *last;
+ struct ext2fs_hashmap_entry {
+ void *data;
+ const void *key;
+ size_t key_len;
+ struct ext2fs_hashmap_entry *next;
+ struct ext2fs_hashmap_entry *list_next;
+ struct ext2fs_hashmap_entry *list_prev;
+#if __GNUC_PREREQ (4, 8)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
+#endif
+ } *entries[0];
+#if __GNUC_PREREQ (4, 8)
+#pragma GCC diagnostic pop
+#endif
};
struct ext2fs_hashmap *ext2fs_hashmap_create(
--
2.21.1

View File

@ -0,0 +1,53 @@
From 8a51e038d172c3405466ddb60d712c2ac934b954 Mon Sep 17 00:00:00 2001
From: Theodore Ts'o <tytso@mit.edu>
Date: Thu, 19 Dec 2019 19:37:34 -0500
Subject: [PATCH 07/10] e2fsck: abort if there is a corrupted directory block
when rehashing
In e2fsck pass 3a, when we are rehashing directories, at least in
theory, all of the directories should have had corruptions with
respect to directory entry structure fixed. However, it's possible
(for example, if the user declined a fix) that we can reach this stage
of processing with a corrupted directory entries.
So check for that case and don't try to process a corrupted directory
block so we don't run into trouble in mutate_name() if there is a
zero-length file name.
Addresses: TALOS-2019-0973
Addresses: CVE-2019-5188
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
---
e2fsck/rehash.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/e2fsck/rehash.c b/e2fsck/rehash.c
index a5fc1be1..3dd1e941 100644
--- a/e2fsck/rehash.c
+++ b/e2fsck/rehash.c
@@ -160,6 +160,10 @@ static int fill_dir_block(ext2_filsys fs,
dir_offset += rec_len;
if (dirent->inode == 0)
continue;
+ if ((name_len) == 0) {
+ fd->err = EXT2_ET_DIR_CORRUPTED;
+ return BLOCK_ABORT;
+ }
if (!fd->compress && (name_len == 1) &&
(dirent->name[0] == '.'))
continue;
@@ -401,6 +405,11 @@ static int duplicate_search_and_fix(e2fsck_t ctx, ext2_filsys fs,
continue;
}
new_len = ext2fs_dirent_name_len(ent->dir);
+ if (new_len == 0) {
+ /* should never happen */
+ ext2fs_unmark_valid(fs);
+ continue;
+ }
memcpy(new_name, ent->dir->name, new_len);
mutate_name(new_name, &new_len);
for (j=0; j < fd->num_array; j++) {
--
2.21.1

View File

@ -0,0 +1,43 @@
From a9daa3b6b888c2834de9869ba8037c22ae8c47e5 Mon Sep 17 00:00:00 2001
From: Theodore Ts'o <tytso@mit.edu>
Date: Wed, 1 Jan 2020 21:50:27 -0500
Subject: [PATCH 10/10] e2fsck: don't check for future superblock times if
checkinterval == 0
We are no longer enabling periodic file system checks by default in
mke2fs. The only reason why we force file system checks if the last
mount time or last write time in the superblock is if this might
bypass the periodic file systme checks. So if the checkinterval is
zero, skip the last mount/write time checks since there's no reason to
force a check just because the system clock is incorrect.
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
---
e2fsck/super.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/e2fsck/super.c b/e2fsck/super.c
index e5932be6..18affcf7 100644
--- a/e2fsck/super.c
+++ b/e2fsck/super.c
@@ -1038,7 +1038,7 @@ void check_super_block(e2fsck_t ctx)
* Check to see if the superblock last mount time or last
* write time is in the future.
*/
- if (!broken_system_clock &&
+ if (!broken_system_clock && fs->super->s_checkinterval &&
!(ctx->flags & E2F_FLAG_TIME_INSANE) &&
fs->super->s_mtime > (__u32) ctx->now) {
pctx.num = fs->super->s_mtime;
@@ -1050,7 +1050,7 @@ void check_super_block(e2fsck_t ctx)
fs->flags |= EXT2_FLAG_DIRTY;
}
}
- if (!broken_system_clock &&
+ if (!broken_system_clock && fs->super->s_checkinterval &&
!(ctx->flags & E2F_FLAG_TIME_INSANE) &&
fs->super->s_wtime > (__u32) ctx->now) {
pctx.num = fs->super->s_wtime;
--
2.21.1

View File

@ -0,0 +1,46 @@
From c8bbee5fdc46876ec96be9c40831dcafadbcb983 Mon Sep 17 00:00:00 2001
From: Theodore Ts'o <tytso@mit.edu>
Date: Thu, 19 Dec 2019 19:45:06 -0500
Subject: [PATCH 08/10] e2fsck: don't try to rehash a deleted directory
If directory has been deleted in pass1[bcd] processing, then we
shouldn't try to rehash the directory in pass 3a when we try to
rehash/reoptimize directories.
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
---
e2fsck/pass1b.c | 4 ++++
e2fsck/rehash.c | 2 ++
2 files changed, 6 insertions(+)
diff --git a/e2fsck/pass1b.c b/e2fsck/pass1b.c
index 5693b9cf..bca701ca 100644
--- a/e2fsck/pass1b.c
+++ b/e2fsck/pass1b.c
@@ -705,6 +705,10 @@ static void delete_file(e2fsck_t ctx, ext2_ino_t ino,
fix_problem(ctx, PR_1B_BLOCK_ITERATE, &pctx);
if (ctx->inode_bad_map)
ext2fs_unmark_inode_bitmap2(ctx->inode_bad_map, ino);
+ if (ctx->inode_reg_map)
+ ext2fs_unmark_inode_bitmap2(ctx->inode_reg_map, ino);
+ ext2fs_unmark_inode_bitmap2(ctx->inode_dir_map, ino);
+ ext2fs_unmark_inode_bitmap2(ctx->inode_used_map, ino);
ext2fs_inode_alloc_stats2(fs, ino, -1, LINUX_S_ISDIR(dp->inode.i_mode));
quota_data_sub(ctx->qctx, &dp->inode, ino,
pb.dup_blocks * fs->blocksize);
diff --git a/e2fsck/rehash.c b/e2fsck/rehash.c
index 3dd1e941..2c908be0 100644
--- a/e2fsck/rehash.c
+++ b/e2fsck/rehash.c
@@ -1028,6 +1028,8 @@ void e2fsck_rehash_directories(e2fsck_t ctx)
if (!ext2fs_u32_list_iterate(iter, &ino))
break;
}
+ if (!ext2fs_test_inode_bitmap2(ctx->inode_dir_map, ino))
+ continue;
pctx.dir = ino;
if (first) {
--
2.21.1

View File

@ -0,0 +1,32 @@
From 4215866fa515f8f319ae602797984289248d8bfe Mon Sep 17 00:00:00 2001
From: Wang Shilong <wshilong@ddn.com>
Date: Tue, 26 Nov 2019 18:03:58 +0900
Subject: [PATCH] e2fsck: fix to return ENOMEM in alloc_size_dir()
Two memory allocation return check is missed.
Signed-off-by: Wang Shilong <wshilong@ddn.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
---
e2fsck/rehash.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/e2fsck/rehash.c b/e2fsck/rehash.c
index e0764d0b..54bc6803 100644
--- a/e2fsck/rehash.c
+++ b/e2fsck/rehash.c
@@ -276,7 +276,11 @@ static errcode_t alloc_size_dir(ext2_filsys fs, struct out_dir *outdir,
outdir->hashes = new_mem;
} else {
outdir->buf = malloc(blocks * fs->blocksize);
+ if (!outdir->buf)
+ return ENOMEM;
outdir->hashes = malloc(blocks * sizeof(ext2_dirhash_t));
+ if (!outdir->hashes)
+ return ENOMEM;
outdir->num = 0;
}
outdir->max = blocks;
--
2.21.1

View File

@ -0,0 +1,72 @@
From aa011a6deafa48b1015d402d7ec0bd40f9308109 Mon Sep 17 00:00:00 2001
From: Wang Shilong <wshilong@ddn.com>
Date: Mon, 30 Dec 2019 19:52:39 -0500
Subject: [PATCH 09/10] e2fsck: fix use after free in calculate_tree()
The problem is alloc_blocks() will call get_next_block() which might
reallocate outdir->buf, and memory address could be changed after
this. To fix this, pointers that point into outdir->buf, such as
int_limit and root need to be recaulated based on the new starting
address of outdir->buf.
[ Changed to correctly recalculate int_limit, and to optimize how we
reallocate outdir->buf. -TYT ]
Signed-off-by: Wang Shilong <wshilong@ddn.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
---
e2fsck/rehash.c | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/e2fsck/rehash.c b/e2fsck/rehash.c
index 2c908be0..e0764d0b 100644
--- a/e2fsck/rehash.c
+++ b/e2fsck/rehash.c
@@ -297,7 +297,11 @@ static errcode_t get_next_block(ext2_filsys fs, struct out_dir *outdir,
errcode_t retval;
if (outdir->num >= outdir->max) {
- retval = alloc_size_dir(fs, outdir, outdir->max + 50);
+ int increment = outdir->max / 10;
+
+ if (increment < 50)
+ increment = 50;
+ retval = alloc_size_dir(fs, outdir, outdir->max + increment);
if (retval)
return retval;
}
@@ -641,6 +645,9 @@ static int alloc_blocks(ext2_filsys fs,
if (retval)
return retval;
+ /* outdir->buf might be reallocated */
+ *prev_ent = (struct ext2_dx_entry *) (outdir->buf + *prev_offset);
+
*next_ent = set_int_node(fs, block_start);
*limit = (struct ext2_dx_countlimit *)(*next_ent);
if (next_offset)
@@ -730,6 +737,9 @@ static errcode_t calculate_tree(ext2_filsys fs,
return retval;
}
if (c3 == 0) {
+ int delta1 = (char *)int_limit - outdir->buf;
+ int delta2 = (char *)root - outdir->buf;
+
retval = alloc_blocks(fs, &limit, &int_ent,
&dx_ent, &int_offset,
NULL, outdir, i, &c2,
@@ -737,6 +747,11 @@ static errcode_t calculate_tree(ext2_filsys fs,
if (retval)
return retval;
+ /* outdir->buf might be reallocated */
+ int_limit = (struct ext2_dx_countlimit *)
+ (outdir->buf + delta1);
+ root = (struct ext2_dx_entry *)
+ (outdir->buf + delta2);
}
dx_ent->block = ext2fs_cpu_to_le32(i);
if (c3 != limit->limit)
--
2.21.1

View File

@ -0,0 +1,50 @@
From 687ba50f6dde0b753870fcd62be5ef30c75bb38f Mon Sep 17 00:00:00 2001
From: Lukas Czerner <lczerner@redhat.com>
Date: Tue, 14 Jan 2020 20:56:41 +0100
Subject: [PATCH] ext2fs: fix ABI change in the struct_ext2_filsys structure
Upstream increased size of the struct_ext2_filsys structure by adding
new encoding member. However this represents ABI breakage within a major
RHEL release. To avoid it use some of the reserved space in the
struct_ext2_filsys structure.
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
---
lib/ext2fs/ext2fs.h | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h
index c50a67cf..5bb9133a 100644
--- a/lib/ext2fs/ext2fs.h
+++ b/lib/ext2fs/ext2fs.h
@@ -250,10 +250,17 @@ struct struct_ext2_filsys {
int cluster_ratio_bits;
__u16 default_bitmap_type;
__u16 pad;
+
+ /*
+ * RedHat specific change to prevent ABI change by using 8
+ * reserved bytes
+ */
+ const struct ext2fs_nls_table *encoding;
+
/*
* Reserved for future expansion
*/
- __u32 reserved[5];
+ __u32 reserved[5 - (sizeof(long int)/4)];
/*
* Reserved for the use of the calling application.
@@ -304,8 +311,6 @@ struct struct_ext2_filsys {
/* hashmap for SHA of data blocks */
struct ext2fs_hashmap* block_sha_map;
-
- const struct ext2fs_nls_table *encoding;
};
#if EXT2_FLAT_INCLUDES
--
2.21.1

View File

@ -0,0 +1,39 @@
From bee65149cc025522ae0e2c37a0ce817641ebac28 Mon Sep 17 00:00:00 2001
From: Theodore Ts'o <tytso@mit.edu>
Date: Mon, 4 Nov 2019 18:43:49 -0500
Subject: [PATCH 02/10] libext2fs: fix UBSan when updating an inline_data file
What memcpy does when the length is zero is not well-defined. So
avoid it.
Bug: https://github.com/tytso/e2fsprogs/issues/25
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
---
lib/ext2fs/ext_attr.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/lib/ext2fs/ext_attr.c b/lib/ext2fs/ext_attr.c
index 78a823a9..affc1a8f 100644
--- a/lib/ext2fs/ext_attr.c
+++ b/lib/ext2fs/ext_attr.c
@@ -1550,14 +1550,15 @@ errcode_t ext2fs_xattr_set(struct ext2_xattr_handle *h,
new_value, &value_len);
if (ret)
goto out;
- } else
+ } else if (value_len)
memcpy(new_value, value, value_len);
/* Imitate kernel behavior by skipping update if value is the same. */
for (x = h->attrs; x < h->attrs + h->count; x++) {
if (!strcmp(x->name, name)) {
if (!x->ea_ino && x->value_len == value_len &&
- !memcmp(x->value, new_value, value_len)) {
+ (!value_len ||
+ !memcmp(x->value, new_value, value_len))) {
ret = 0;
goto out;
}
--
2.21.1

View File

@ -0,0 +1,41 @@
From b989de221a8399d42aede6da03297cad3330f12a Mon Sep 17 00:00:00 2001
From: Theodore Ts'o <tytso@mit.edu>
Date: Mon, 4 Nov 2019 16:43:41 -0500
Subject: [PATCH 01/10] libext2fs: fix bug when reading or writing more than
2GB in unix_io
If count * block_size exceeds 2GB, we will overflow a 32-bit signed
integer value. This shouldn't happen in practice except for
fuzz-corrupted file systems, but let's fix the code so it's correct.
Bug: https://github.com/tytso/e2fsprogs/issues/24
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
---
lib/ext2fs/unix_io.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/ext2fs/unix_io.c b/lib/ext2fs/unix_io.c
index 74fc8a75..628e60c3 100644
--- a/lib/ext2fs/unix_io.c
+++ b/lib/ext2fs/unix_io.c
@@ -166,7 +166,7 @@ static errcode_t raw_read_blk(io_channel channel,
unsigned char *buf = bufv;
ssize_t really_read = 0;
- size = (count < 0) ? -count : count * channel->block_size;
+ size = (count < 0) ? -count : (ext2_loff_t) count * channel->block_size;
data->io_stats.bytes_read += size;
location = ((ext2_loff_t) block * channel->block_size) + data->offset;
@@ -275,7 +275,7 @@ static errcode_t raw_write_blk(io_channel channel,
if (count < 0)
size = -count;
else
- size = count * channel->block_size;
+ size = (ext2_loff_t) count * channel->block_size;
}
data->io_stats.bytes_written += size;
--
2.21.1

View File

@ -0,0 +1,36 @@
From 764286ba7af40105ec9f27dba164fa53936c282f Mon Sep 17 00:00:00 2001
From: Theodore Ts'o <tytso@mit.edu>
Date: Fri, 8 Nov 2019 09:49:51 -0500
Subject: [PATCH 04/10] libext2fs: properly free the bitmaps in read_bitmap()'s
error/cleanup path
Use ext2fs_free_{block,inode}_bitmaps() instead of ext2fs_free_mem()
to avoid some memory leaks if there is an error while calling
read_bitmaps().
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
---
lib/ext2fs/rw_bitmaps.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/ext2fs/rw_bitmaps.c b/lib/ext2fs/rw_bitmaps.c
index f1c4188b..e092cab0 100644
--- a/lib/ext2fs/rw_bitmaps.c
+++ b/lib/ext2fs/rw_bitmaps.c
@@ -396,11 +396,11 @@ success_cleanup:
cleanup:
if (do_block) {
- ext2fs_free_mem(&fs->block_map);
+ ext2fs_free_block_bitmap(fs->block_map);
fs->block_map = 0;
}
if (do_inode) {
- ext2fs_free_mem(&fs->inode_map);
+ ext2fs_free_inode_bitmap(fs->inode_map);
fs->inode_map = 0;
}
if (inode_bitmap)
--
2.21.1

View File

@ -0,0 +1,51 @@
From 21e41eeef968941c1ee0126852fdb705967730ea Mon Sep 17 00:00:00 2001
From: Theodore Ts'o <tytso@mit.edu>
Date: Fri, 8 Nov 2019 11:58:10 -0500
Subject: [PATCH 05/10] libext2fs: verify the block numbers for the allocation
bitmaps are valid
This avoids a potential UBsan failure when we multiply an insanely
high block number with the block size and we get a multiplication
overflow.
Google-Bug-Id: 128130353
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
---
lib/ext2fs/rw_bitmaps.c | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/lib/ext2fs/rw_bitmaps.c b/lib/ext2fs/rw_bitmaps.c
index e092cab0..d80c9eb8 100644
--- a/lib/ext2fs/rw_bitmaps.c
+++ b/lib/ext2fs/rw_bitmaps.c
@@ -306,9 +306,10 @@ static errcode_t read_bitmaps(ext2_filsys fs, int do_inode, int do_block)
for (i = 0; i < fs->group_desc_count; i++) {
if (block_bitmap) {
blk = ext2fs_block_bitmap_loc(fs, i);
- if (csum_flag &&
- ext2fs_bg_flags_test(fs, i, EXT2_BG_BLOCK_UNINIT) &&
- ext2fs_group_desc_csum_verify(fs, i))
+ if ((csum_flag &&
+ ext2fs_bg_flags_test(fs, i, EXT2_BG_BLOCK_UNINIT) &&
+ ext2fs_group_desc_csum_verify(fs, i)) ||
+ (blk >= ext2fs_blocks_count(fs->super)))
blk = 0;
if (blk) {
retval = io_channel_read_blk64(fs->io, blk,
@@ -340,9 +341,10 @@ static errcode_t read_bitmaps(ext2_filsys fs, int do_inode, int do_block)
}
if (inode_bitmap) {
blk = ext2fs_inode_bitmap_loc(fs, i);
- if (csum_flag &&
- ext2fs_bg_flags_test(fs, i, EXT2_BG_INODE_UNINIT) &&
- ext2fs_group_desc_csum_verify(fs, i))
+ if ((csum_flag &&
+ ext2fs_bg_flags_test(fs, i, EXT2_BG_INODE_UNINIT) &&
+ ext2fs_group_desc_csum_verify(fs, i)) ||
+ (blk >= ext2fs_blocks_count(fs->super)))
blk = 0;
if (blk) {
retval = io_channel_read_blk64(fs->io, blk,
--
2.21.1

View File

@ -0,0 +1,56 @@
From d758a667f27b38d9ecc0715062307a8bce741aee Mon Sep 17 00:00:00 2001
From: "Darrick J. Wong" <darrick.wong@oracle.com>
Date: Wed, 20 Nov 2019 11:32:55 -0800
Subject: [PATCH 06/10] tune2fs: prohibit toggling uninit_bg on live
filesystems
An internal customer followed an erroneous AskUbuntu article[1] to try to
change the UUID of a live ext4 filesystem. The article claims that you
can work around tune2fs' "cannot change UUID on live fs" error by
disabling uninit_bg, changing the UUID, and re-enabling the feature.
This led to metadata corruption because tune2fs' journal descriptor
rewrite races with regular filesystem writes. Therefore, prevent
administrators from turning on or off uninit_bg on a mounted fs.
[1] https://askubuntu.com/questions/132079/how-do-i-change-uuid-of-a-disk-to-whatever-i-want/195839#459097
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
---
misc/tune2fs.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/misc/tune2fs.c b/misc/tune2fs.c
index 7d2d38d7..301cf388 100644
--- a/misc/tune2fs.c
+++ b/misc/tune2fs.c
@@ -1308,6 +1308,12 @@ mmp_error:
if (FEATURE_ON(E2P_FEATURE_RO_INCOMPAT,
EXT4_FEATURE_RO_COMPAT_GDT_CSUM)) {
+ if (mount_flags & EXT2_MF_MOUNTED) {
+ fputs(_("Cannot enable uninit_bg on a mounted "
+ "filesystem!\n"), stderr);
+ exit(1);
+ }
+
/* Do not enable uninit_bg when metadata_csum enabled */
if (ext2fs_has_feature_metadata_csum(fs->super))
ext2fs_clear_feature_gdt_csum(fs->super);
@@ -1317,6 +1323,12 @@ mmp_error:
if (FEATURE_OFF(E2P_FEATURE_RO_INCOMPAT,
EXT4_FEATURE_RO_COMPAT_GDT_CSUM)) {
+ if (mount_flags & EXT2_MF_MOUNTED) {
+ fputs(_("Cannot disable uninit_bg on a mounted "
+ "filesystem!\n"), stderr);
+ exit(1);
+ }
+
err = disable_uninit_bg(fs,
EXT4_FEATURE_RO_COMPAT_GDT_CSUM);
if (err)
--
2.21.1

1038
SPECS/e2fsprogs.spec Normal file

File diff suppressed because it is too large Load Diff