import e2fsprogs-1.45.4-3.el8
This commit is contained in:
parent
0d4ae6a802
commit
57bc68ffca
@ -1 +1 @@
|
|||||||
132ecc3dd92b3ac9e488b7c8bbe2e769001856d1 SOURCES/e2fsprogs-1.44.6.tar.xz
|
4f2ac3a153c23d57968632e12c944eeb50613c51 SOURCES/e2fsprogs-1.45.4.tar.xz
|
||||||
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1 @@
|
|||||||
SOURCES/e2fsprogs-1.44.6.tar.xz
|
SOURCES/e2fsprogs-1.45.4.tar.xz
|
||||||
|
@ -1,29 +0,0 @@
|
|||||||
From 563d63dbf762c41f908b5e10deb1b115def93bcc Mon Sep 17 00:00:00 2001
|
|
||||||
From: Theodore Ts'o <tytso@mit.edu>
|
|
||||||
Date: Tue, 26 Mar 2019 09:36:53 -0400
|
|
||||||
Subject: [PATCH 4/4] debugfs: fix printing of xattrs with ea_in_inode values
|
|
||||||
|
|
||||||
Due to a missing "else" debugfs was printing (garbage) from the xattr
|
|
||||||
buffer which could potentially overrun the end of the buffer.
|
|
||||||
|
|
||||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
|
||||||
---
|
|
||||||
debugfs/xattrs.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/debugfs/xattrs.c b/debugfs/xattrs.c
|
|
||||||
index c29761ec..dde9af2f 100644
|
|
||||||
--- a/debugfs/xattrs.c
|
|
||||||
+++ b/debugfs/xattrs.c
|
|
||||||
@@ -448,7 +448,7 @@ static void dump_xattr_raw_entries(FILE *f, unsigned char *buf,
|
|
||||||
else if (ent.e_value_offs >= len ||
|
|
||||||
(vstart + ent.e_value_size) > len)
|
|
||||||
fprintf(f, "<runs off end>");
|
|
||||||
- if (is_mostly_printable((char *)(buf + vstart),
|
|
||||||
+ else if (is_mostly_printable((char *)(buf + vstart),
|
|
||||||
ent.e_value_size))
|
|
||||||
safe_print(f, (char *)(buf + vstart),
|
|
||||||
ent.e_value_size);
|
|
||||||
--
|
|
||||||
2.20.1
|
|
||||||
|
|
@ -1,244 +0,0 @@
|
|||||||
From 5862f45c314aaf97ce098add06c42b5d592dc984 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Theodore Ts'o <tytso@mit.edu>
|
|
||||||
Date: Thu, 13 Dec 2018 00:53:16 -0500
|
|
||||||
Subject: [PATCH 2/4] debugfs: fix set_inode_field so it can set the checksum
|
|
||||||
field
|
|
||||||
|
|
||||||
Previously, setting the inode field was a no-op, since the library
|
|
||||||
function ext2fs_write_inode_full() would override whatever value was
|
|
||||||
set by debugfs. Use the new ext2fs_write_inode2() interface so we can
|
|
||||||
in fact set the checksum to a potentially wrong value. Also, ignore
|
|
||||||
the inode checksum failures if we are setting the checksum, and if the
|
|
||||||
checksum value is "calc", set the inode checksum to the correct value.
|
|
||||||
|
|
||||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
|
||||||
---
|
|
||||||
debugfs/debugfs.c | 12 +++----
|
|
||||||
debugfs/debugfs.h | 8 ++---
|
|
||||||
debugfs/set_fields.c | 84 +++++++++++++++++++++++++++++++++++++++-----
|
|
||||||
debugfs/util.c | 17 +++++----
|
|
||||||
4 files changed, 94 insertions(+), 27 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/debugfs/debugfs.c b/debugfs/debugfs.c
|
|
||||||
index faae12da..06a93270 100644
|
|
||||||
--- a/debugfs/debugfs.c
|
|
||||||
+++ b/debugfs/debugfs.c
|
|
||||||
@@ -985,8 +985,8 @@ void do_stat(int argc, char *argv[])
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (debugfs_read_inode_full(inode, inode_buf, argv[0],
|
|
||||||
- EXT2_INODE_SIZE(current_fs->super))) {
|
|
||||||
+ if (debugfs_read_inode2(inode, inode_buf, argv[0],
|
|
||||||
+ EXT2_INODE_SIZE(current_fs->super), 0)) {
|
|
||||||
free(inode_buf);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
@@ -1608,12 +1608,12 @@ void do_copy_inode(int argc, char *argv[])
|
|
||||||
if (!dest_ino)
|
|
||||||
return;
|
|
||||||
|
|
||||||
- if (debugfs_read_inode_full(src_ino, (struct ext2_inode *) buf,
|
|
||||||
- argv[0], sizeof(buf)))
|
|
||||||
+ if (debugfs_read_inode2(src_ino, (struct ext2_inode *) buf,
|
|
||||||
+ argv[0], sizeof(buf), 0))
|
|
||||||
return;
|
|
||||||
|
|
||||||
- if (debugfs_write_inode_full(dest_ino, (struct ext2_inode *) buf,
|
|
||||||
- argv[0], sizeof(buf)))
|
|
||||||
+ if (debugfs_write_inode2(dest_ino, (struct ext2_inode *) buf,
|
|
||||||
+ argv[0], sizeof(buf), 0))
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/debugfs/debugfs.h b/debugfs/debugfs.h
|
|
||||||
index 93f036de..97fdde7e 100644
|
|
||||||
--- a/debugfs/debugfs.h
|
|
||||||
+++ b/debugfs/debugfs.h
|
|
||||||
@@ -54,12 +54,12 @@ extern int common_block_args_process(int argc, char *argv[],
|
|
||||||
blk64_t *block, blk64_t *count);
|
|
||||||
extern int debugfs_read_inode(ext2_ino_t ino, struct ext2_inode * inode,
|
|
||||||
const char *cmd);
|
|
||||||
-extern int debugfs_read_inode_full(ext2_ino_t ino, struct ext2_inode * inode,
|
|
||||||
- const char *cmd, int bufsize);
|
|
||||||
+extern int debugfs_read_inode2(ext2_ino_t ino, struct ext2_inode * inode,
|
|
||||||
+ const char *cmd, int bufsize, int flags);
|
|
||||||
extern int debugfs_write_inode(ext2_ino_t ino, struct ext2_inode * inode,
|
|
||||||
const char *cmd);
|
|
||||||
-extern int debugfs_write_inode_full(ext2_ino_t ino, struct ext2_inode * inode,
|
|
||||||
- const char *cmd, int bufsize);
|
|
||||||
+extern int debugfs_write_inode2(ext2_ino_t ino, struct ext2_inode * inode,
|
|
||||||
+ const char *cmd, int bufsize, int flags);
|
|
||||||
extern int debugfs_write_new_inode(ext2_ino_t ino, struct ext2_inode * inode,
|
|
||||||
const char *cmd);
|
|
||||||
extern int ext2_file_type(unsigned int mode);
|
|
||||||
diff --git a/debugfs/set_fields.c b/debugfs/set_fields.c
|
|
||||||
index 3cdf617c..4f033249 100644
|
|
||||||
--- a/debugfs/set_fields.c
|
|
||||||
+++ b/debugfs/set_fields.c
|
|
||||||
@@ -53,6 +53,7 @@ static int array_idx;
|
|
||||||
|
|
||||||
#define FLAG_ARRAY 0x0001
|
|
||||||
#define FLAG_ALIAS 0x0002 /* Data intersects with other field */
|
|
||||||
+#define FLAG_CSUM 0x0004
|
|
||||||
|
|
||||||
struct field_set_info {
|
|
||||||
const char *name;
|
|
||||||
@@ -72,6 +73,8 @@ static errcode_t parse_hashalg(struct field_set_info *info, char *field, char *a
|
|
||||||
static errcode_t parse_time(struct field_set_info *info, char *field, char *arg);
|
|
||||||
static errcode_t parse_bmap(struct field_set_info *info, char *field, char *arg);
|
|
||||||
static errcode_t parse_gd_csum(struct field_set_info *info, char *field, char *arg);
|
|
||||||
+static errcode_t parse_inode_csum(struct field_set_info *info, char *field,
|
|
||||||
+ char *arg);
|
|
||||||
static errcode_t parse_mmp_clear(struct field_set_info *info, char *field,
|
|
||||||
char *arg);
|
|
||||||
|
|
||||||
@@ -218,7 +221,7 @@ static struct field_set_info inode_fields[] = {
|
|
||||||
{ "frag", &set_inode.osd2.hurd2.h_i_frag, NULL, 1, parse_uint, FLAG_ALIAS },
|
|
||||||
{ "fsize", &set_inode.osd2.hurd2.h_i_fsize, NULL, 1, parse_uint },
|
|
||||||
{ "checksum", &set_inode.osd2.linux2.l_i_checksum_lo,
|
|
||||||
- &set_inode.i_checksum_hi, 2, parse_uint },
|
|
||||||
+ &set_inode.i_checksum_hi, 2, parse_inode_csum, FLAG_CSUM },
|
|
||||||
{ "author", &set_inode.osd2.hurd2.h_i_author, NULL,
|
|
||||||
4, parse_uint, FLAG_ALIAS },
|
|
||||||
{ "extra_isize", &set_inode.i_extra_isize, NULL,
|
|
||||||
@@ -665,6 +668,68 @@ static errcode_t parse_gd_csum(struct field_set_info *info, char *field,
|
|
||||||
return parse_uint(info, field, arg);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static errcode_t parse_inode_csum(struct field_set_info *info, char *field,
|
|
||||||
+ char *arg)
|
|
||||||
+{
|
|
||||||
+ errcode_t retval = 0;
|
|
||||||
+ __u32 crc;
|
|
||||||
+ int is_large_inode = 0;
|
|
||||||
+ struct ext2_inode_large *tmp_inode;
|
|
||||||
+
|
|
||||||
+ if (strcmp(arg, "calc") == 0) {
|
|
||||||
+ size_t sz = EXT2_INODE_SIZE(current_fs->super);
|
|
||||||
+ struct ext2_inode_large *tmp_inode = NULL;
|
|
||||||
+
|
|
||||||
+ retval = ext2fs_get_mem(sz, &tmp_inode);
|
|
||||||
+ if (retval)
|
|
||||||
+ goto out;
|
|
||||||
+
|
|
||||||
+ retval = ext2fs_read_inode_full(current_fs, set_ino,
|
|
||||||
+ (struct ext2_inode *) tmp_inode,
|
|
||||||
+ sz);
|
|
||||||
+ if (retval)
|
|
||||||
+ goto out;
|
|
||||||
+
|
|
||||||
+#ifdef WORDS_BIGENDIAN
|
|
||||||
+ ext2fs_swap_inode_full(current_fs, tmp_inode,
|
|
||||||
+ tmp_inode, 1, sz);
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+ if (sz > EXT2_GOOD_OLD_INODE_SIZE)
|
|
||||||
+ is_large_inode = 1;
|
|
||||||
+
|
|
||||||
+ retval = ext2fs_inode_csum_set(current_fs, set_ino,
|
|
||||||
+ tmp_inode);
|
|
||||||
+ if (retval)
|
|
||||||
+ goto out;
|
|
||||||
+#ifdef WORDS_BIGENDIAN
|
|
||||||
+ crc = set_inode.i_checksum_lo =
|
|
||||||
+ ext2fs_swab16(tmp_inode->i_checksum_lo);
|
|
||||||
+
|
|
||||||
+#else
|
|
||||||
+ crc = set_inode.i_checksum_lo = tmp_inode->i_checksum_lo;
|
|
||||||
+#endif
|
|
||||||
+ if (is_large_inode &&
|
|
||||||
+ set_inode.i_extra_isize >=
|
|
||||||
+ (offsetof(struct ext2_inode_large,
|
|
||||||
+ i_checksum_hi) -
|
|
||||||
+ EXT2_GOOD_OLD_INODE_SIZE)) {
|
|
||||||
+#ifdef WORDS_BIGENDIAN
|
|
||||||
+ set_inode.i_checksum_lo =
|
|
||||||
+ ext2fs_swab16(tmp_inode->i_checksum_lo);
|
|
||||||
+#else
|
|
||||||
+ set_inode.i_checksum_hi = tmp_inode->i_checksum_hi;
|
|
||||||
+#endif
|
|
||||||
+ crc |= ((__u32)set_inode.i_checksum_hi) << 16;
|
|
||||||
+ }
|
|
||||||
+ printf("Checksum set to 0x%08x\n", crc);
|
|
||||||
+ out:
|
|
||||||
+ ext2fs_free_mem(&tmp_inode);
|
|
||||||
+ return retval;
|
|
||||||
+ }
|
|
||||||
+ return parse_uint(info, field, arg);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static void print_possible_fields(struct field_set_info *fields)
|
|
||||||
{
|
|
||||||
struct field_set_info *ss;
|
|
||||||
@@ -775,16 +840,19 @@ void do_set_inode(int argc, char *argv[])
|
|
||||||
if (!set_ino)
|
|
||||||
return;
|
|
||||||
|
|
||||||
- if (debugfs_read_inode_full(set_ino,
|
|
||||||
- (struct ext2_inode *) &set_inode, argv[1],
|
|
||||||
- sizeof(set_inode)))
|
|
||||||
+ if (debugfs_read_inode2(set_ino,
|
|
||||||
+ (struct ext2_inode *) &set_inode, argv[1],
|
|
||||||
+ sizeof(set_inode),
|
|
||||||
+ (ss->flags & FLAG_CSUM) ?
|
|
||||||
+ READ_INODE_NOCSUM : 0))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (ss->func(ss, argv[2], argv[3]) == 0) {
|
|
||||||
- if (debugfs_write_inode_full(set_ino,
|
|
||||||
- (struct ext2_inode *) &set_inode,
|
|
||||||
- argv[1], sizeof(set_inode)))
|
|
||||||
- return;
|
|
||||||
+ debugfs_write_inode2(set_ino,
|
|
||||||
+ (struct ext2_inode *) &set_inode,
|
|
||||||
+ argv[1], sizeof(set_inode),
|
|
||||||
+ (ss->flags & FLAG_CSUM) ?
|
|
||||||
+ WRITE_INODE_NOCSUM : 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/debugfs/util.c b/debugfs/util.c
|
|
||||||
index 452de749..759bb392 100644
|
|
||||||
--- a/debugfs/util.c
|
|
||||||
+++ b/debugfs/util.c
|
|
||||||
@@ -420,12 +420,12 @@ int common_block_args_process(int argc, char *argv[],
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
-int debugfs_read_inode_full(ext2_ino_t ino, struct ext2_inode * inode,
|
|
||||||
- const char *cmd, int bufsize)
|
|
||||||
+int debugfs_read_inode2(ext2_ino_t ino, struct ext2_inode * inode,
|
|
||||||
+ const char *cmd, int bufsize, int flags)
|
|
||||||
{
|
|
||||||
int retval;
|
|
||||||
|
|
||||||
- retval = ext2fs_read_inode_full(current_fs, ino, inode, bufsize);
|
|
||||||
+ retval = ext2fs_read_inode2(current_fs, ino, inode, bufsize, flags);
|
|
||||||
if (retval) {
|
|
||||||
com_err(cmd, retval, "while reading inode %u", ino);
|
|
||||||
return 1;
|
|
||||||
@@ -446,15 +446,14 @@ int debugfs_read_inode(ext2_ino_t ino, struct ext2_inode * inode,
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
-int debugfs_write_inode_full(ext2_ino_t ino,
|
|
||||||
- struct ext2_inode *inode,
|
|
||||||
- const char *cmd,
|
|
||||||
- int bufsize)
|
|
||||||
+int debugfs_write_inode2(ext2_ino_t ino,
|
|
||||||
+ struct ext2_inode *inode,
|
|
||||||
+ const char *cmd,
|
|
||||||
+ int bufsize, int flags)
|
|
||||||
{
|
|
||||||
int retval;
|
|
||||||
|
|
||||||
- retval = ext2fs_write_inode_full(current_fs, ino,
|
|
||||||
- inode, bufsize);
|
|
||||||
+ retval = ext2fs_write_inode2(current_fs, ino, inode, bufsize, flags);
|
|
||||||
if (retval) {
|
|
||||||
com_err(cmd, retval, "while writing inode %u", ino);
|
|
||||||
return 1;
|
|
||||||
--
|
|
||||||
2.20.1
|
|
||||||
|
|
@ -1,28 +0,0 @@
|
|||||||
From 68c586c2b58cfb1677a1b37f6e55025d905228ed Mon Sep 17 00:00:00 2001
|
|
||||||
From: Eric Biggers <ebiggers@google.com>
|
|
||||||
Date: Sun, 28 Apr 2019 20:37:21 -0400
|
|
||||||
Subject: [PATCH 1/4] debugfs: remove unused variable 'tmp_inode'
|
|
||||||
|
|
||||||
In parse_inode_csum(), the outer 'tmp_inode' variable is never used.
|
|
||||||
|
|
||||||
Signed-off-by: Eric Biggers <ebiggers@google.com>
|
|
||||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
|
||||||
---
|
|
||||||
debugfs/set_fields.c | 1 -
|
|
||||||
1 file changed, 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/debugfs/set_fields.c b/debugfs/set_fields.c
|
|
||||||
index 4f033249..9cf8c735 100644
|
|
||||||
--- a/debugfs/set_fields.c
|
|
||||||
+++ b/debugfs/set_fields.c
|
|
||||||
@@ -674,7 +674,6 @@ static errcode_t parse_inode_csum(struct field_set_info *info, char *field,
|
|
||||||
errcode_t retval = 0;
|
|
||||||
__u32 crc;
|
|
||||||
int is_large_inode = 0;
|
|
||||||
- struct ext2_inode_large *tmp_inode;
|
|
||||||
|
|
||||||
if (strcmp(arg, "calc") == 0) {
|
|
||||||
size_t sz = EXT2_INODE_SIZE(current_fs->super);
|
|
||||||
--
|
|
||||||
2.20.1
|
|
||||||
|
|
@ -1,568 +0,0 @@
|
|||||||
From 6e44ff6678a96b2bc5ddc42c5bf2cbad09b71af2 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Theodore Ts'o <tytso@mit.edu>
|
|
||||||
Date: Sun, 5 May 2019 16:43:33 -0400
|
|
||||||
Subject: [PATCH 3/4] e2fsck: check and fix tails of all bitmap blocks
|
|
||||||
|
|
||||||
Currently, e2fsck effectively checks only tail of the last inode and
|
|
||||||
block bitmap in the filesystem. Thus if some previous bitmap has unset
|
|
||||||
bits it goes unnoticed. Mostly these tail bits in the bitmap are
|
|
||||||
ignored; however, if blocks_per_group are smaller than 8*blocksize,
|
|
||||||
the multi-block allocator in the kernel can get confused when the tail
|
|
||||||
bits are unset and return bogus free extent.
|
|
||||||
|
|
||||||
Add support to libext2fs to check these bitmap tails when loading
|
|
||||||
bitmaps (as that's about the only place which has access to the bitmap
|
|
||||||
tail bits) and make e2fsck use this functionality to detect buggy bitmap
|
|
||||||
tails and fix them (by rewriting the bitmaps).
|
|
||||||
|
|
||||||
Reported-by: Jan Kara <jack@suse.cz>
|
|
||||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
|
||||||
Reviewed-by: Jan Kara <jack@suse.cz>
|
|
||||||
---
|
|
||||||
e2fsck/pass5.c | 40 ++++++++++++++++---
|
|
||||||
lib/ext2fs/ext2fs.h | 2 +
|
|
||||||
lib/ext2fs/rw_bitmaps.c | 26 +++++++++++-
|
|
||||||
tests/f_bitmaps/expect.1 | 2 +
|
|
||||||
tests/f_dup/expect.1 | 2 +
|
|
||||||
tests/f_dup2/expect.1 | 2 +
|
|
||||||
tests/f_dup3/expect.1 | 2 +
|
|
||||||
tests/f_end-bitmap/expect.1 | 2 +
|
|
||||||
tests/f_illbbitmap/expect.1 | 2 +
|
|
||||||
tests/f_illibitmap/expect.1 | 2 +
|
|
||||||
tests/f_illitable_flexbg/expect.1 | 2 +
|
|
||||||
tests/f_lpf/expect.1 | 2 +
|
|
||||||
tests/f_overfsblks/expect.1 | 2 +
|
|
||||||
tests/f_super_bad_csum/expect.1 | 4 +-
|
|
||||||
tests/j_corrupt_ext_jnl_sb_csum/expect | 2 +
|
|
||||||
tests/j_ext_long_trans/expect | 2 +
|
|
||||||
tests/j_long_trans/expect | 2 +
|
|
||||||
tests/j_long_trans_mcsum_32bit/expect | 2 +
|
|
||||||
tests/j_long_trans_mcsum_64bit/expect | 2 +
|
|
||||||
tests/j_recover_csum2_32bit/expect.1 | 2 +
|
|
||||||
tests/j_recover_csum2_64bit/expect.1 | 2 +
|
|
||||||
tests/j_short_trans/expect | 2 +
|
|
||||||
tests/j_short_trans_64bit/expect | 2 +
|
|
||||||
tests/j_short_trans_mcsum_64bit/expect | 2 +
|
|
||||||
tests/j_short_trans_old_csum/expect | 2 +
|
|
||||||
tests/j_short_trans_open_recover/expect | 2 +
|
|
||||||
tests/j_short_trans_recover/expect | 2 +
|
|
||||||
.../j_short_trans_recover_mcsum_64bit/expect | 2 +
|
|
||||||
tests/t_replay_and_set/expect | 2 +
|
|
||||||
29 files changed, 113 insertions(+), 9 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/e2fsck/pass5.c b/e2fsck/pass5.c
|
|
||||||
index 7803e8b8..81009097 100644
|
|
||||||
--- a/e2fsck/pass5.c
|
|
||||||
+++ b/e2fsck/pass5.c
|
|
||||||
@@ -838,6 +838,7 @@ static void check_inode_end(e2fsck_t ctx)
|
|
||||||
ext2_filsys fs = ctx->fs;
|
|
||||||
ext2_ino_t end, save_inodes_count, i;
|
|
||||||
struct problem_context pctx;
|
|
||||||
+ int asked = 0;
|
|
||||||
|
|
||||||
clear_problem_context(&pctx);
|
|
||||||
|
|
||||||
@@ -851,11 +852,12 @@ static void check_inode_end(e2fsck_t ctx)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (save_inodes_count == end)
|
|
||||||
- return;
|
|
||||||
+ goto check_intra_bg_tail;
|
|
||||||
|
|
||||||
/* protect loop from wrap-around if end is maxed */
|
|
||||||
for (i = save_inodes_count + 1; i <= end && i > save_inodes_count; i++) {
|
|
||||||
if (!ext2fs_test_inode_bitmap(fs->inode_map, i)) {
|
|
||||||
+ asked = 1;
|
|
||||||
if (fix_problem(ctx, PR_5_INODE_BMAP_PADDING, &pctx)) {
|
|
||||||
for (; i <= end; i++)
|
|
||||||
ext2fs_mark_inode_bitmap(fs->inode_map,
|
|
||||||
@@ -875,6 +877,20 @@ static void check_inode_end(e2fsck_t ctx)
|
|
||||||
ctx->flags |= E2F_FLAG_ABORT; /* fatal */
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
+ /*
|
|
||||||
+ * If the number of inodes per block group != blocksize, we
|
|
||||||
+ * can also have a potential problem with the tail bits in
|
|
||||||
+ * each individual inode bitmap block. If there is a problem,
|
|
||||||
+ * it would have been noticed when the bitmap was loaded. And
|
|
||||||
+ * fixing this is easy; all we need to do force the bitmap to
|
|
||||||
+ * be written back to disk.
|
|
||||||
+ */
|
|
||||||
+check_intra_bg_tail:
|
|
||||||
+ if (!asked && fs->flags & EXT2_FLAG_IBITMAP_TAIL_PROBLEM)
|
|
||||||
+ if (fix_problem(ctx, PR_5_INODE_BMAP_PADDING, &pctx))
|
|
||||||
+ ext2fs_mark_ib_dirty(fs);
|
|
||||||
+ else
|
|
||||||
+ ext2fs_unmark_valid(fs);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void check_block_end(e2fsck_t ctx)
|
|
||||||
@@ -882,6 +898,7 @@ static void check_block_end(e2fsck_t ctx)
|
|
||||||
ext2_filsys fs = ctx->fs;
|
|
||||||
blk64_t end, save_blocks_count, i;
|
|
||||||
struct problem_context pctx;
|
|
||||||
+ int asked = 0;
|
|
||||||
|
|
||||||
clear_problem_context(&pctx);
|
|
||||||
|
|
||||||
@@ -896,12 +913,13 @@ static void check_block_end(e2fsck_t ctx)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (save_blocks_count == end)
|
|
||||||
- return;
|
|
||||||
+ goto check_intra_bg_tail;
|
|
||||||
|
|
||||||
/* Protect loop from wrap-around if end is maxed */
|
|
||||||
for (i = save_blocks_count + 1; i <= end && i > save_blocks_count; i++) {
|
|
||||||
if (!ext2fs_test_block_bitmap2(fs->block_map,
|
|
||||||
EXT2FS_C2B(fs, i))) {
|
|
||||||
+ asked = 1;
|
|
||||||
if (fix_problem(ctx, PR_5_BLOCK_BMAP_PADDING, &pctx)) {
|
|
||||||
for (; i <= end; i++)
|
|
||||||
ext2fs_mark_block_bitmap2(fs->block_map,
|
|
||||||
@@ -921,7 +939,19 @@ static void check_block_end(e2fsck_t ctx)
|
|
||||||
ctx->flags |= E2F_FLAG_ABORT; /* fatal */
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
+ /*
|
|
||||||
+ * If the number of blocks per block group != blocksize, we
|
|
||||||
+ * can also have a potential problem with the tail bits in
|
|
||||||
+ * each individual block bitmap block. If there is a problem,
|
|
||||||
+ * it would have been noticed when the bitmap was loaded. And
|
|
||||||
+ * fixing this is easy; all we need to do force the bitmap to
|
|
||||||
+ * be written back to disk.
|
|
||||||
+ */
|
|
||||||
+check_intra_bg_tail:
|
|
||||||
+ if (!asked && fs->flags & EXT2_FLAG_BBITMAP_TAIL_PROBLEM) {
|
|
||||||
+ if (fix_problem(ctx, PR_5_BLOCK_BMAP_PADDING, &pctx))
|
|
||||||
+ ext2fs_mark_bb_dirty(fs);
|
|
||||||
+ else
|
|
||||||
+ ext2fs_unmark_valid(fs);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
-
|
|
||||||
-
|
|
||||||
-
|
|
||||||
diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h
|
|
||||||
index 96735c8e..285eb5e1 100644
|
|
||||||
--- a/lib/ext2fs/ext2fs.h
|
|
||||||
+++ b/lib/ext2fs/ext2fs.h
|
|
||||||
@@ -199,6 +199,8 @@ typedef struct ext2_file *ext2_file_t;
|
|
||||||
#define EXT2_FLAG_IGNORE_CSUM_ERRORS 0x200000
|
|
||||||
#define EXT2_FLAG_SHARE_DUP 0x400000
|
|
||||||
#define EXT2_FLAG_IGNORE_SB_ERRORS 0x800000
|
|
||||||
+#define EXT2_FLAG_BBITMAP_TAIL_PROBLEM 0x1000000
|
|
||||||
+#define EXT2_FLAG_IBITMAP_TAIL_PROBLEM 0x2000000
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Special flag in the ext2 inode i_flag field that means that this is
|
|
||||||
diff --git a/lib/ext2fs/rw_bitmaps.c b/lib/ext2fs/rw_bitmaps.c
|
|
||||||
index e86bacd5..f1c4188b 100644
|
|
||||||
--- a/lib/ext2fs/rw_bitmaps.c
|
|
||||||
+++ b/lib/ext2fs/rw_bitmaps.c
|
|
||||||
@@ -195,6 +195,16 @@ static errcode_t mark_uninit_bg_group_blocks(ext2_filsys fs)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static int bitmap_tail_verify(unsigned char *bitmap, int first, int last)
|
|
||||||
+{
|
|
||||||
+ int i;
|
|
||||||
+
|
|
||||||
+ for (i = first; i <= last; i++)
|
|
||||||
+ if (bitmap[i] != 0xff)
|
|
||||||
+ return 0;
|
|
||||||
+ return 1;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static errcode_t read_bitmaps(ext2_filsys fs, int do_inode, int do_block)
|
|
||||||
{
|
|
||||||
dgrp_t i;
|
|
||||||
@@ -203,6 +213,7 @@ static errcode_t read_bitmaps(ext2_filsys fs, int do_inode, int do_block)
|
|
||||||
errcode_t retval;
|
|
||||||
int block_nbytes = EXT2_CLUSTERS_PER_GROUP(fs->super) / 8;
|
|
||||||
int inode_nbytes = EXT2_INODES_PER_GROUP(fs->super) / 8;
|
|
||||||
+ int tail_flags = 0;
|
|
||||||
int csum_flag;
|
|
||||||
unsigned int cnt;
|
|
||||||
blk64_t blk;
|
|
||||||
@@ -315,6 +326,9 @@ static errcode_t read_bitmaps(ext2_filsys fs, int do_inode, int do_block)
|
|
||||||
EXT2_ET_BLOCK_BITMAP_CSUM_INVALID;
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
+ if (!bitmap_tail_verify((unsigned char *) block_bitmap,
|
|
||||||
+ block_nbytes, fs->blocksize - 1))
|
|
||||||
+ tail_flags |= EXT2_FLAG_BBITMAP_TAIL_PROBLEM;
|
|
||||||
} else
|
|
||||||
memset(block_bitmap, 0, block_nbytes);
|
|
||||||
cnt = block_nbytes << 3;
|
|
||||||
@@ -347,6 +361,9 @@ static errcode_t read_bitmaps(ext2_filsys fs, int do_inode, int do_block)
|
|
||||||
EXT2_ET_INODE_BITMAP_CSUM_INVALID;
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
+ if (!bitmap_tail_verify((unsigned char *) inode_bitmap,
|
|
||||||
+ inode_nbytes, fs->blocksize - 1))
|
|
||||||
+ tail_flags |= EXT2_FLAG_IBITMAP_TAIL_PROBLEM;
|
|
||||||
} else
|
|
||||||
memset(inode_bitmap, 0, inode_nbytes);
|
|
||||||
cnt = inode_nbytes << 3;
|
|
||||||
@@ -366,10 +383,15 @@ static errcode_t read_bitmaps(ext2_filsys fs, int do_inode, int do_block)
|
|
||||||
}
|
|
||||||
|
|
||||||
success_cleanup:
|
|
||||||
- if (inode_bitmap)
|
|
||||||
+ if (inode_bitmap) {
|
|
||||||
ext2fs_free_mem(&inode_bitmap);
|
|
||||||
- if (block_bitmap)
|
|
||||||
+ fs->flags &= ~EXT2_FLAG_IBITMAP_TAIL_PROBLEM;
|
|
||||||
+ }
|
|
||||||
+ if (block_bitmap) {
|
|
||||||
ext2fs_free_mem(&block_bitmap);
|
|
||||||
+ fs->flags &= ~EXT2_FLAG_BBITMAP_TAIL_PROBLEM;
|
|
||||||
+ }
|
|
||||||
+ fs->flags |= tail_flags;
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
cleanup:
|
|
||||||
diff --git a/tests/f_bitmaps/expect.1 b/tests/f_bitmaps/expect.1
|
|
||||||
index 715984d4..2e91113d 100644
|
|
||||||
--- a/tests/f_bitmaps/expect.1
|
|
||||||
+++ b/tests/f_bitmaps/expect.1
|
|
||||||
@@ -11,6 +11,8 @@ Fix? yes
|
|
||||||
Inode bitmap differences: +11 -15
|
|
||||||
Fix? yes
|
|
||||||
|
|
||||||
+Padding at end of inode bitmap is not set. Fix? yes
|
|
||||||
+
|
|
||||||
|
|
||||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
|
||||||
test_filesys: 11/32 files (9.1% non-contiguous), 22/100 blocks
|
|
||||||
diff --git a/tests/f_dup/expect.1 b/tests/f_dup/expect.1
|
|
||||||
index 075e62c1..635a0dfc 100644
|
|
||||||
--- a/tests/f_dup/expect.1
|
|
||||||
+++ b/tests/f_dup/expect.1
|
|
||||||
@@ -30,6 +30,8 @@ Fix? yes
|
|
||||||
Free blocks count wrong (62, counted=60).
|
|
||||||
Fix? yes
|
|
||||||
|
|
||||||
+Padding at end of inode bitmap is not set. Fix? yes
|
|
||||||
+
|
|
||||||
Padding at end of block bitmap is not set. Fix? yes
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/tests/f_dup2/expect.1 b/tests/f_dup2/expect.1
|
|
||||||
index 69aa21b4..04d7304b 100644
|
|
||||||
--- a/tests/f_dup2/expect.1
|
|
||||||
+++ b/tests/f_dup2/expect.1
|
|
||||||
@@ -37,6 +37,8 @@ Fix? yes
|
|
||||||
Free blocks count wrong (26, counted=22).
|
|
||||||
Fix? yes
|
|
||||||
|
|
||||||
+Padding at end of inode bitmap is not set. Fix? yes
|
|
||||||
+
|
|
||||||
Padding at end of block bitmap is not set. Fix? yes
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/tests/f_dup3/expect.1 b/tests/f_dup3/expect.1
|
|
||||||
index eab75a8d..5f79cb89 100644
|
|
||||||
--- a/tests/f_dup3/expect.1
|
|
||||||
+++ b/tests/f_dup3/expect.1
|
|
||||||
@@ -39,6 +39,8 @@ Fix? yes
|
|
||||||
Free blocks count wrong (20, counted=19).
|
|
||||||
Fix? yes
|
|
||||||
|
|
||||||
+Padding at end of inode bitmap is not set. Fix? yes
|
|
||||||
+
|
|
||||||
|
|
||||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
|
||||||
test_filesys: 16/16 files (25.0% non-contiguous), 81/100 blocks
|
|
||||||
diff --git a/tests/f_end-bitmap/expect.1 b/tests/f_end-bitmap/expect.1
|
|
||||||
index 87e2fd64..85c7e67f 100644
|
|
||||||
--- a/tests/f_end-bitmap/expect.1
|
|
||||||
+++ b/tests/f_end-bitmap/expect.1
|
|
||||||
@@ -8,6 +8,8 @@ Pass 5: Checking group summary information
|
|
||||||
Free blocks count wrong for group #0 (44, counted=63).
|
|
||||||
Fix? yes
|
|
||||||
|
|
||||||
+Padding at end of inode bitmap is not set. Fix? yes
|
|
||||||
+
|
|
||||||
Padding at end of block bitmap is not set. Fix? yes
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/tests/f_illbbitmap/expect.1 b/tests/f_illbbitmap/expect.1
|
|
||||||
index 8746d23a..40996cd6 100644
|
|
||||||
--- a/tests/f_illbbitmap/expect.1
|
|
||||||
+++ b/tests/f_illbbitmap/expect.1
|
|
||||||
@@ -22,6 +22,8 @@ Fix? yes
|
|
||||||
Inode bitmap differences: -(12--21)
|
|
||||||
Fix? yes
|
|
||||||
|
|
||||||
+Padding at end of inode bitmap is not set. Fix? yes
|
|
||||||
+
|
|
||||||
|
|
||||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
|
||||||
test_filesys: 11/32 files (0.0% non-contiguous), 22/100 blocks
|
|
||||||
diff --git a/tests/f_illibitmap/expect.1 b/tests/f_illibitmap/expect.1
|
|
||||||
index 5bae25d1..bf21df7a 100644
|
|
||||||
--- a/tests/f_illibitmap/expect.1
|
|
||||||
+++ b/tests/f_illibitmap/expect.1
|
|
||||||
@@ -19,6 +19,8 @@ Pass 5: Checking group summary information
|
|
||||||
Inode bitmap differences: +(1--11)
|
|
||||||
Fix? yes
|
|
||||||
|
|
||||||
+Padding at end of inode bitmap is not set. Fix? yes
|
|
||||||
+
|
|
||||||
|
|
||||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
|
||||||
test_filesys: 11/32 files (0.0% non-contiguous), 22/100 blocks
|
|
||||||
diff --git a/tests/f_illitable_flexbg/expect.1 b/tests/f_illitable_flexbg/expect.1
|
|
||||||
index fa42a0f8..4ac12463 100644
|
|
||||||
--- a/tests/f_illitable_flexbg/expect.1
|
|
||||||
+++ b/tests/f_illitable_flexbg/expect.1
|
|
||||||
@@ -18,6 +18,8 @@ Pass 5: Checking group summary information
|
|
||||||
Inode bitmap differences: -(65--128)
|
|
||||||
Fix? yes
|
|
||||||
|
|
||||||
+Padding at end of inode bitmap is not set. Fix? yes
|
|
||||||
+
|
|
||||||
|
|
||||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
|
||||||
test_filesys: 12/256 files (0.0% non-contiguous), 31163/32768 blocks
|
|
||||||
diff --git a/tests/f_lpf/expect.1 b/tests/f_lpf/expect.1
|
|
||||||
index 4f2853c5..6ef996bb 100644
|
|
||||||
--- a/tests/f_lpf/expect.1
|
|
||||||
+++ b/tests/f_lpf/expect.1
|
|
||||||
@@ -42,6 +42,8 @@ Fix? yes
|
|
||||||
Free inodes count wrong (1, counted=0).
|
|
||||||
Fix? yes
|
|
||||||
|
|
||||||
+Padding at end of inode bitmap is not set. Fix? yes
|
|
||||||
+
|
|
||||||
|
|
||||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
|
||||||
test_filesys: 16/16 files (12.5% non-contiguous), 67/100 blocks
|
|
||||||
diff --git a/tests/f_overfsblks/expect.1 b/tests/f_overfsblks/expect.1
|
|
||||||
index e5b93f0d..bc8f2a87 100644
|
|
||||||
--- a/tests/f_overfsblks/expect.1
|
|
||||||
+++ b/tests/f_overfsblks/expect.1
|
|
||||||
@@ -13,6 +13,8 @@ Pass 5: Checking group summary information
|
|
||||||
Inode bitmap differences: -(12--21)
|
|
||||||
Fix? yes
|
|
||||||
|
|
||||||
+Padding at end of inode bitmap is not set. Fix? yes
|
|
||||||
+
|
|
||||||
|
|
||||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
|
||||||
test_filesys: 11/32 files (0.0% non-contiguous), 22/100 blocks
|
|
||||||
diff --git a/tests/f_super_bad_csum/expect.1 b/tests/f_super_bad_csum/expect.1
|
|
||||||
index 25ced5c8..12adee97 100644
|
|
||||||
--- a/tests/f_super_bad_csum/expect.1
|
|
||||||
+++ b/tests/f_super_bad_csum/expect.1
|
|
||||||
@@ -5,8 +5,8 @@ Pass 2: Checking directory structure
|
|
||||||
Pass 3: Checking directory connectivity
|
|
||||||
Pass 4: Checking reference counts
|
|
||||||
Pass 5: Checking group summary information
|
|
||||||
-Inode bitmap differences: Group 1 inode bitmap does not match checksum.
|
|
||||||
-FIXED.
|
|
||||||
+Padding at end of inode bitmap is not set. Fix? yes
|
|
||||||
+
|
|
||||||
|
|
||||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
|
||||||
test_filesys: 11/1024 files (0.0% non-contiguous), 1557/16384 blocks
|
|
||||||
diff --git a/tests/j_corrupt_ext_jnl_sb_csum/expect b/tests/j_corrupt_ext_jnl_sb_csum/expect
|
|
||||||
index 70a4fe72..4212a000 100644
|
|
||||||
--- a/tests/j_corrupt_ext_jnl_sb_csum/expect
|
|
||||||
+++ b/tests/j_corrupt_ext_jnl_sb_csum/expect
|
|
||||||
@@ -12,6 +12,8 @@ Fix? yes
|
|
||||||
Inode bitmap differences: +(1--11)
|
|
||||||
Fix? yes
|
|
||||||
|
|
||||||
+Padding at end of inode bitmap is not set. Fix? yes
|
|
||||||
+
|
|
||||||
|
|
||||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
|
||||||
test_filesys: 11/128 files (0.0% non-contiguous), 66/2048 blocks
|
|
||||||
diff --git a/tests/j_ext_long_trans/expect b/tests/j_ext_long_trans/expect
|
|
||||||
index d379610e..ea3c87fc 100644
|
|
||||||
--- a/tests/j_ext_long_trans/expect
|
|
||||||
+++ b/tests/j_ext_long_trans/expect
|
|
||||||
@@ -98,6 +98,8 @@ Fix? yes
|
|
||||||
Free inodes count wrong (16372, counted=16373).
|
|
||||||
Fix? yes
|
|
||||||
|
|
||||||
+Padding at end of inode bitmap is not set. Fix? yes
|
|
||||||
+
|
|
||||||
|
|
||||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
|
||||||
test_filesys: 11/16384 files (0.0% non-contiguous), 6228/262144 blocks
|
|
||||||
diff --git a/tests/j_long_trans/expect b/tests/j_long_trans/expect
|
|
||||||
index 7a175414..82b3caf1 100644
|
|
||||||
--- a/tests/j_long_trans/expect
|
|
||||||
+++ b/tests/j_long_trans/expect
|
|
||||||
@@ -96,6 +96,8 @@ Fix? yes
|
|
||||||
Free inodes count wrong (16372, counted=16373).
|
|
||||||
Fix? yes
|
|
||||||
|
|
||||||
+Padding at end of inode bitmap is not set. Fix? yes
|
|
||||||
+
|
|
||||||
Recreate journal? yes
|
|
||||||
|
|
||||||
Creating journal (8192 blocks): Done.
|
|
||||||
diff --git a/tests/j_long_trans_mcsum_32bit/expect b/tests/j_long_trans_mcsum_32bit/expect
|
|
||||||
index a808d9f4..ffae07a6 100644
|
|
||||||
--- a/tests/j_long_trans_mcsum_32bit/expect
|
|
||||||
+++ b/tests/j_long_trans_mcsum_32bit/expect
|
|
||||||
@@ -135,6 +135,8 @@ Fix? yes
|
|
||||||
Free inodes count wrong (32756, counted=32757).
|
|
||||||
Fix? yes
|
|
||||||
|
|
||||||
+Padding at end of inode bitmap is not set. Fix? yes
|
|
||||||
+
|
|
||||||
Recreate journal? yes
|
|
||||||
|
|
||||||
Creating journal (16384 blocks): Done.
|
|
||||||
diff --git a/tests/j_long_trans_mcsum_64bit/expect b/tests/j_long_trans_mcsum_64bit/expect
|
|
||||||
index 76e109a4..e891def1 100644
|
|
||||||
--- a/tests/j_long_trans_mcsum_64bit/expect
|
|
||||||
+++ b/tests/j_long_trans_mcsum_64bit/expect
|
|
||||||
@@ -134,6 +134,8 @@ Fix? yes
|
|
||||||
Free inodes count wrong (32756, counted=32757).
|
|
||||||
Fix? yes
|
|
||||||
|
|
||||||
+Padding at end of inode bitmap is not set. Fix? yes
|
|
||||||
+
|
|
||||||
Recreate journal? yes
|
|
||||||
|
|
||||||
Creating journal (16384 blocks): Done.
|
|
||||||
diff --git a/tests/j_recover_csum2_32bit/expect.1 b/tests/j_recover_csum2_32bit/expect.1
|
|
||||||
index 491784a2..fdbda36e 100644
|
|
||||||
--- a/tests/j_recover_csum2_32bit/expect.1
|
|
||||||
+++ b/tests/j_recover_csum2_32bit/expect.1
|
|
||||||
@@ -10,6 +10,8 @@ Fix? yes
|
|
||||||
Inode bitmap differences: +(1--11)
|
|
||||||
Fix? yes
|
|
||||||
|
|
||||||
+Padding at end of inode bitmap is not set. Fix? yes
|
|
||||||
+
|
|
||||||
|
|
||||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
|
||||||
test_filesys: 11/8192 files (0.0% non-contiguous), 7739/131072 blocks
|
|
||||||
diff --git a/tests/j_recover_csum2_64bit/expect.1 b/tests/j_recover_csum2_64bit/expect.1
|
|
||||||
index 491784a2..fdbda36e 100644
|
|
||||||
--- a/tests/j_recover_csum2_64bit/expect.1
|
|
||||||
+++ b/tests/j_recover_csum2_64bit/expect.1
|
|
||||||
@@ -10,6 +10,8 @@ Fix? yes
|
|
||||||
Inode bitmap differences: +(1--11)
|
|
||||||
Fix? yes
|
|
||||||
|
|
||||||
+Padding at end of inode bitmap is not set. Fix? yes
|
|
||||||
+
|
|
||||||
|
|
||||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
|
||||||
test_filesys: 11/8192 files (0.0% non-contiguous), 7739/131072 blocks
|
|
||||||
diff --git a/tests/j_short_trans/expect b/tests/j_short_trans/expect
|
|
||||||
index bcc8fe82..2bd0e506 100644
|
|
||||||
--- a/tests/j_short_trans/expect
|
|
||||||
+++ b/tests/j_short_trans/expect
|
|
||||||
@@ -32,6 +32,8 @@ Fix? yes
|
|
||||||
Inode bitmap differences: +(1--11)
|
|
||||||
Fix? yes
|
|
||||||
|
|
||||||
+Padding at end of inode bitmap is not set. Fix? yes
|
|
||||||
+
|
|
||||||
|
|
||||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
|
||||||
test_filesys: 11/16384 files (0.0% non-contiguous), 5164/65536 blocks
|
|
||||||
diff --git a/tests/j_short_trans_64bit/expect b/tests/j_short_trans_64bit/expect
|
|
||||||
index f9971eba..808dc61d 100644
|
|
||||||
--- a/tests/j_short_trans_64bit/expect
|
|
||||||
+++ b/tests/j_short_trans_64bit/expect
|
|
||||||
@@ -34,6 +34,8 @@ Fix? yes
|
|
||||||
Inode bitmap differences: +(1--11)
|
|
||||||
Fix? yes
|
|
||||||
|
|
||||||
+Padding at end of inode bitmap is not set. Fix? yes
|
|
||||||
+
|
|
||||||
|
|
||||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
|
||||||
test_filesys: 11/16384 files (0.0% non-contiguous), 5196/65536 blocks
|
|
||||||
diff --git a/tests/j_short_trans_mcsum_64bit/expect b/tests/j_short_trans_mcsum_64bit/expect
|
|
||||||
index d876ff09..d73e2829 100644
|
|
||||||
--- a/tests/j_short_trans_mcsum_64bit/expect
|
|
||||||
+++ b/tests/j_short_trans_mcsum_64bit/expect
|
|
||||||
@@ -34,6 +34,8 @@ Fix? yes
|
|
||||||
Inode bitmap differences: +(1--11)
|
|
||||||
Fix? yes
|
|
||||||
|
|
||||||
+Padding at end of inode bitmap is not set. Fix? yes
|
|
||||||
+
|
|
||||||
|
|
||||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
|
||||||
test_filesys: 11/32768 files (0.0% non-contiguous), 6353/131072 blocks
|
|
||||||
diff --git a/tests/j_short_trans_old_csum/expect b/tests/j_short_trans_old_csum/expect
|
|
||||||
index 29ac27fb..6cf06d4a 100644
|
|
||||||
--- a/tests/j_short_trans_old_csum/expect
|
|
||||||
+++ b/tests/j_short_trans_old_csum/expect
|
|
||||||
@@ -34,6 +34,8 @@ Fix? yes
|
|
||||||
Inode bitmap differences: +(1--11)
|
|
||||||
Fix? yes
|
|
||||||
|
|
||||||
+Padding at end of inode bitmap is not set. Fix? yes
|
|
||||||
+
|
|
||||||
|
|
||||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
|
||||||
test_filesys: 11/16384 files (0.0% non-contiguous), 5164/65536 blocks
|
|
||||||
diff --git a/tests/j_short_trans_open_recover/expect b/tests/j_short_trans_open_recover/expect
|
|
||||||
index be6e363d..3e868197 100644
|
|
||||||
--- a/tests/j_short_trans_open_recover/expect
|
|
||||||
+++ b/tests/j_short_trans_open_recover/expect
|
|
||||||
@@ -37,6 +37,8 @@ Fix? yes
|
|
||||||
Inode bitmap differences: +(1--11)
|
|
||||||
Fix? yes
|
|
||||||
|
|
||||||
+Padding at end of inode bitmap is not set. Fix? yes
|
|
||||||
+
|
|
||||||
|
|
||||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
|
||||||
test_filesys: 11/16384 files (0.0% non-contiguous), 5164/65536 blocks
|
|
||||||
diff --git a/tests/j_short_trans_recover/expect b/tests/j_short_trans_recover/expect
|
|
||||||
index 75867337..508858c9 100644
|
|
||||||
--- a/tests/j_short_trans_recover/expect
|
|
||||||
+++ b/tests/j_short_trans_recover/expect
|
|
||||||
@@ -34,6 +34,8 @@ Fix? yes
|
|
||||||
Inode bitmap differences: +(1--11)
|
|
||||||
Fix? yes
|
|
||||||
|
|
||||||
+Padding at end of inode bitmap is not set. Fix? yes
|
|
||||||
+
|
|
||||||
|
|
||||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
|
||||||
test_filesys: 11/16384 files (0.0% non-contiguous), 5164/65536 blocks
|
|
||||||
diff --git a/tests/j_short_trans_recover_mcsum_64bit/expect b/tests/j_short_trans_recover_mcsum_64bit/expect
|
|
||||||
index 9cc33097..8c637f12 100644
|
|
||||||
--- a/tests/j_short_trans_recover_mcsum_64bit/expect
|
|
||||||
+++ b/tests/j_short_trans_recover_mcsum_64bit/expect
|
|
||||||
@@ -36,6 +36,8 @@ Fix? yes
|
|
||||||
Inode bitmap differences: +(1--11)
|
|
||||||
Fix? yes
|
|
||||||
|
|
||||||
+Padding at end of inode bitmap is not set. Fix? yes
|
|
||||||
+
|
|
||||||
|
|
||||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
|
||||||
test_filesys: 11/32768 files (0.0% non-contiguous), 6353/131072 blocks
|
|
||||||
diff --git a/tests/t_replay_and_set/expect b/tests/t_replay_and_set/expect
|
|
||||||
index f63a73af..3e19d92e 100644
|
|
||||||
--- a/tests/t_replay_and_set/expect
|
|
||||||
+++ b/tests/t_replay_and_set/expect
|
|
||||||
@@ -30,6 +30,8 @@ Fix? yes
|
|
||||||
Inode bitmap differences: +(1--11)
|
|
||||||
Fix? yes
|
|
||||||
|
|
||||||
+Padding at end of inode bitmap is not set. Fix? yes
|
|
||||||
+
|
|
||||||
|
|
||||||
test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
|
|
||||||
test_filesys: 11/16384 files (0.0% non-contiguous), 5164/65536 blocks
|
|
||||||
--
|
|
||||||
2.20.1
|
|
||||||
|
|
@ -1,35 +0,0 @@
|
|||||||
From 90557d26c6282e8171b422966860eb5594b82eb5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Theodore Ts'o <tytso@mit.edu>
|
|
||||||
Date: Fri, 10 May 2019 19:21:03 -0400
|
|
||||||
Subject: [PATCH 4/4] e2fsck: remove an potentially ambiguous dangling else
|
|
||||||
clause
|
|
||||||
|
|
||||||
This doesn't actually fix a bug or change behavior, but it removes a
|
|
||||||
clang warning.
|
|
||||||
|
|
||||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
|
||||||
---
|
|
||||||
e2fsck/pass5.c | 3 ++-
|
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/e2fsck/pass5.c b/e2fsck/pass5.c
|
|
||||||
index 81009097..3a5c88da 100644
|
|
||||||
--- a/e2fsck/pass5.c
|
|
||||||
+++ b/e2fsck/pass5.c
|
|
||||||
@@ -886,11 +886,12 @@ static void check_inode_end(e2fsck_t ctx)
|
|
||||||
* be written back to disk.
|
|
||||||
*/
|
|
||||||
check_intra_bg_tail:
|
|
||||||
- if (!asked && fs->flags & EXT2_FLAG_IBITMAP_TAIL_PROBLEM)
|
|
||||||
+ if (!asked && fs->flags & EXT2_FLAG_IBITMAP_TAIL_PROBLEM) {
|
|
||||||
if (fix_problem(ctx, PR_5_INODE_BMAP_PADDING, &pctx))
|
|
||||||
ext2fs_mark_ib_dirty(fs);
|
|
||||||
else
|
|
||||||
ext2fs_unmark_valid(fs);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
static void check_block_end(e2fsck_t ctx)
|
|
||||||
--
|
|
||||||
2.20.1
|
|
||||||
|
|
@ -1,187 +0,0 @@
|
|||||||
From c86892cb20129e3925fb16c228fb7433332371ce Mon Sep 17 00:00:00 2001
|
|
||||||
From: Artem Blagodarenko <artem.blagodarenko@gmail.com>
|
|
||||||
Date: Wed, 6 Mar 2019 11:52:13 -0500
|
|
||||||
Subject: [PATCH 3/4] e2image: add -b and -B options to specify where to find
|
|
||||||
the superblock
|
|
||||||
|
|
||||||
e2image has no ability to use superblock backup to copy metadata.
|
|
||||||
This feature can be useful if someone wants to make partition
|
|
||||||
image and fix it using e2fsck utility.
|
|
||||||
|
|
||||||
New -b option allows to pass superblock number, like e2fsck utility does.
|
|
||||||
e2image doesn't change primary superblock and store it as is, so
|
|
||||||
it can be fixed using e2fsck latter. Option -B allows setting
|
|
||||||
superblock size.
|
|
||||||
|
|
||||||
Signed-off-by: Artem Blagodarenko <c17828@cray.com>
|
|
||||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
|
||||||
---
|
|
||||||
misc/e2image.8.in | 33 +++++++++++++++++++++++++++++++++
|
|
||||||
misc/e2image.c | 43 +++++++++++++++++++++++++++++++++++++------
|
|
||||||
2 files changed, 70 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/misc/e2image.8.in b/misc/e2image.8.in
|
|
||||||
index a7bfdf24..bbbb57ae 100644
|
|
||||||
--- a/misc/e2image.8.in
|
|
||||||
+++ b/misc/e2image.8.in
|
|
||||||
@@ -12,6 +12,15 @@ e2image \- Save critical ext2/ext3/ext4 filesystem metadata to a file
|
|
||||||
]
|
|
||||||
[
|
|
||||||
.B \-f
|
|
||||||
+.B \-b
|
|
||||||
+.I superblock
|
|
||||||
+]
|
|
||||||
+[
|
|
||||||
+.B \-B
|
|
||||||
+.I blocksize
|
|
||||||
+]
|
|
||||||
+[
|
|
||||||
+.B \-fr
|
|
||||||
]
|
|
||||||
.I device
|
|
||||||
.I image-file
|
|
||||||
@@ -167,6 +176,22 @@ the
|
|
||||||
option will prevent analysis of problems related to hash-tree indexed
|
|
||||||
directories.
|
|
||||||
.PP
|
|
||||||
+Option
|
|
||||||
+.B \-b
|
|
||||||
+.I superblock
|
|
||||||
+can be used to get image from partition with broken primary superblock.
|
|
||||||
+The partition is copied as-is including broken primary superblock.
|
|
||||||
+.PP
|
|
||||||
+Option
|
|
||||||
+.B \-B
|
|
||||||
+.I blocksize
|
|
||||||
+can be used to set superblock block size. Normally, e2fsck will search
|
|
||||||
+for the superblock at various different block sizes in an attempt to find
|
|
||||||
+the appropriate blocksize. This search can be fooled in some cases. This
|
|
||||||
+option forces e2fsck to only try locating the superblock at a particular
|
|
||||||
+blocksize. If the superblock is not found, e2fsck will terminate with a
|
|
||||||
+fatal error.
|
|
||||||
+.PP
|
|
||||||
Note that this will work even if you substitute "/dev/hda1" for another raw
|
|
||||||
disk image, or QCOW2 image previously created by
|
|
||||||
.BR e2image .
|
|
||||||
@@ -217,6 +242,14 @@ This can be useful to write a qcow2 image containing all data to a
|
|
||||||
sparse image file where it can be loop mounted, or to a disk partition.
|
|
||||||
Note that this may not work with qcow2 images not generated by e2image.
|
|
||||||
.PP
|
|
||||||
+Options
|
|
||||||
+.B \-b
|
|
||||||
+.I superblock
|
|
||||||
+and
|
|
||||||
+.B \-B
|
|
||||||
+.I blocksize
|
|
||||||
+can be used same way as for raw images.
|
|
||||||
+.PP
|
|
||||||
.SH INCLUDING DATA
|
|
||||||
Normally
|
|
||||||
.B e2image
|
|
||||||
diff --git a/misc/e2image.c b/misc/e2image.c
|
|
||||||
index 9e21d0db..3c881fee 100644
|
|
||||||
--- a/misc/e2image.c
|
|
||||||
+++ b/misc/e2image.c
|
|
||||||
@@ -104,7 +104,8 @@ static int get_bits_from_size(size_t size)
|
|
||||||
|
|
||||||
static void usage(void)
|
|
||||||
{
|
|
||||||
- fprintf(stderr, _("Usage: %s [ -r|Q ] [ -f ] device image-file\n"),
|
|
||||||
+ fprintf(stderr, _("Usage: %s [ -r|Q ] [ -f ] [ -b superblock ] [ -B blocksize]"
|
|
||||||
+ "[ -fr ] device image-file\n"),
|
|
||||||
program_name);
|
|
||||||
fprintf(stderr, _(" %s -I device image-file\n"), program_name);
|
|
||||||
fprintf(stderr, _(" %s -ra [ -cfnp ] [ -o src_offset ] "
|
|
||||||
@@ -1267,7 +1268,8 @@ static void output_qcow2_meta_data_blocks(ext2_filsys fs, int fd)
|
|
||||||
free_qcow2_image(img);
|
|
||||||
}
|
|
||||||
|
|
||||||
-static void write_raw_image_file(ext2_filsys fs, int fd, int type, int flags)
|
|
||||||
+static void write_raw_image_file(ext2_filsys fs, int fd, int type, int flags,
|
|
||||||
+ blk64_t superblock)
|
|
||||||
{
|
|
||||||
struct process_block_struct pb;
|
|
||||||
struct ext2_inode inode;
|
|
||||||
@@ -1295,6 +1297,22 @@ static void write_raw_image_file(ext2_filsys fs, int fd, int type, int flags)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (superblock) {
|
|
||||||
+ int j;
|
|
||||||
+
|
|
||||||
+ ext2fs_mark_block_bitmap2(meta_block_map, superblock);
|
|
||||||
+ meta_blocks_count++;
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Mark the backup superblock descriptors
|
|
||||||
+ */
|
|
||||||
+ for (j = 0; j < fs->desc_blocks; j++) {
|
|
||||||
+ ext2fs_mark_block_bitmap2(meta_block_map,
|
|
||||||
+ ext2fs_descriptor_block_loc2(fs, superblock, j));
|
|
||||||
+ }
|
|
||||||
+ meta_blocks_count += fs->desc_blocks;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
mark_table_blocks(fs);
|
|
||||||
if (show_progress)
|
|
||||||
fprintf(stderr, "%s", _("Scanning inodes...\n"));
|
|
||||||
@@ -1474,6 +1492,8 @@ int main (int argc, char ** argv)
|
|
||||||
int ignore_rw_mount = 0;
|
|
||||||
int check = 0;
|
|
||||||
struct stat st;
|
|
||||||
+ blk64_t superblock = 0;
|
|
||||||
+ int blocksize = 0;
|
|
||||||
|
|
||||||
#ifdef ENABLE_NLS
|
|
||||||
setlocale(LC_MESSAGES, "");
|
|
||||||
@@ -1487,8 +1507,14 @@ int main (int argc, char ** argv)
|
|
||||||
if (argc && *argv)
|
|
||||||
program_name = *argv;
|
|
||||||
add_error_table(&et_ext2_error_table);
|
|
||||||
- while ((c = getopt(argc, argv, "nrsIQafo:O:pc")) != EOF)
|
|
||||||
+ while ((c = getopt(argc, argv, "b:B:nrsIQafo:O:pc")) != EOF)
|
|
||||||
switch (c) {
|
|
||||||
+ case 'b':
|
|
||||||
+ superblock = strtoull(optarg, NULL, 0);
|
|
||||||
+ break;
|
|
||||||
+ case 'B':
|
|
||||||
+ blocksize = strtoul(optarg, NULL, 0);
|
|
||||||
+ break;
|
|
||||||
case 'I':
|
|
||||||
flags |= E2IMAGE_INSTALL_FLAG;
|
|
||||||
break;
|
|
||||||
@@ -1540,6 +1566,11 @@ int main (int argc, char ** argv)
|
|
||||||
"with raw or QCOW2 images."));
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
+ if (superblock && !img_type) {
|
|
||||||
+ com_err(program_name, 0, "%s", _("-b option can only be used "
|
|
||||||
+ "with raw or QCOW2 images."));
|
|
||||||
+ exit(1);
|
|
||||||
+ }
|
|
||||||
if ((source_offset || dest_offset) && img_type != E2IMAGE_RAW) {
|
|
||||||
com_err(program_name, 0, "%s",
|
|
||||||
_("Offsets are only allowed with raw images."));
|
|
||||||
@@ -1590,8 +1621,8 @@ int main (int argc, char ** argv)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sprintf(offset_opt, "offset=%llu", source_offset);
|
|
||||||
- retval = ext2fs_open2(device_name, offset_opt, open_flag, 0, 0,
|
|
||||||
- unix_io_manager, &fs);
|
|
||||||
+ retval = ext2fs_open2(device_name, offset_opt, open_flag,
|
|
||||||
+ superblock, blocksize, unix_io_manager, &fs);
|
|
||||||
if (retval) {
|
|
||||||
com_err (program_name, retval, _("while trying to open %s"),
|
|
||||||
device_name);
|
|
||||||
@@ -1681,7 +1712,7 @@ skip_device:
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
if (img_type)
|
|
||||||
- write_raw_image_file(fs, fd, img_type, flags);
|
|
||||||
+ write_raw_image_file(fs, fd, img_type, flags, superblock);
|
|
||||||
else
|
|
||||||
write_image_file(fs, fd);
|
|
||||||
|
|
||||||
--
|
|
||||||
2.20.1
|
|
||||||
|
|
@ -1,162 +0,0 @@
|
|||||||
From 5fef457767fa876e29a5277e6c7428aa36c9ac61 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Theodore Ts'o <tytso@mit.edu>
|
|
||||||
Date: Thu, 13 Dec 2018 00:51:51 -0500
|
|
||||||
Subject: [PATCH 1/4] libext2fs: add ext2fs_{read,write}_inode2()
|
|
||||||
|
|
||||||
Add new library interface which allows the caller to control whether
|
|
||||||
the inode checksum should be checked on inode read, or set on inode
|
|
||||||
write.
|
|
||||||
|
|
||||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
|
||||||
---
|
|
||||||
lib/ext2fs/ext2fs.h | 18 +++++++++++++++-
|
|
||||||
lib/ext2fs/inode.c | 50 +++++++++++++++++++++++++++++----------------
|
|
||||||
2 files changed, 49 insertions(+), 19 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h
|
|
||||||
index c86596a6..96735c8e 100644
|
|
||||||
--- a/lib/ext2fs/ext2fs.h
|
|
||||||
+++ b/lib/ext2fs/ext2fs.h
|
|
||||||
@@ -570,6 +570,16 @@ typedef struct ext2_icount *ext2_icount_t;
|
|
||||||
*/
|
|
||||||
#define BMAP_RET_UNINIT 0x0001
|
|
||||||
|
|
||||||
+/*
|
|
||||||
+ * Flags for ext2fs_read_inode2
|
|
||||||
+ */
|
|
||||||
+#define READ_INODE_NOCSUM 0x0001
|
|
||||||
+
|
|
||||||
+/*
|
|
||||||
+ * Flags for ext2fs_write_inode2
|
|
||||||
+ */
|
|
||||||
+#define WRITE_INODE_NOCSUM 0x0001
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
* Flags for imager.c functions
|
|
||||||
*/
|
|
||||||
@@ -1514,13 +1524,19 @@ extern int ext2fs_inode_scan_flags(ext2_inode_scan scan, int set_flags,
|
|
||||||
extern errcode_t ext2fs_read_inode_full(ext2_filsys fs, ext2_ino_t ino,
|
|
||||||
struct ext2_inode * inode,
|
|
||||||
int bufsize);
|
|
||||||
-extern errcode_t ext2fs_read_inode (ext2_filsys fs, ext2_ino_t ino,
|
|
||||||
+extern errcode_t ext2fs_read_inode(ext2_filsys fs, ext2_ino_t ino,
|
|
||||||
struct ext2_inode * inode);
|
|
||||||
+extern errcode_t ext2fs_read_inode2(ext2_filsys fs, ext2_ino_t ino,
|
|
||||||
+ struct ext2_inode * inode,
|
|
||||||
+ int bufsize, int flags);
|
|
||||||
extern errcode_t ext2fs_write_inode_full(ext2_filsys fs, ext2_ino_t ino,
|
|
||||||
struct ext2_inode * inode,
|
|
||||||
int bufsize);
|
|
||||||
extern errcode_t ext2fs_write_inode(ext2_filsys fs, ext2_ino_t ino,
|
|
||||||
struct ext2_inode * inode);
|
|
||||||
+extern errcode_t ext2fs_write_inode2(ext2_filsys fs, ext2_ino_t ino,
|
|
||||||
+ struct ext2_inode * inode,
|
|
||||||
+ int bufsize, int flags);
|
|
||||||
extern errcode_t ext2fs_write_new_inode(ext2_filsys fs, ext2_ino_t ino,
|
|
||||||
struct ext2_inode * inode);
|
|
||||||
extern errcode_t ext2fs_get_blocks(ext2_filsys fs, ext2_ino_t ino, blk_t *blocks);
|
|
||||||
diff --git a/lib/ext2fs/inode.c b/lib/ext2fs/inode.c
|
|
||||||
index 013c658e..2a4be739 100644
|
|
||||||
--- a/lib/ext2fs/inode.c
|
|
||||||
+++ b/lib/ext2fs/inode.c
|
|
||||||
@@ -740,8 +740,9 @@ errcode_t ext2fs_get_next_inode(ext2_inode_scan scan, ext2_ino_t *ino,
|
|
||||||
/*
|
|
||||||
* Functions to read and write a single inode.
|
|
||||||
*/
|
|
||||||
-errcode_t ext2fs_read_inode_full(ext2_filsys fs, ext2_ino_t ino,
|
|
||||||
- struct ext2_inode * inode, int bufsize)
|
|
||||||
+errcode_t ext2fs_read_inode2(ext2_filsys fs, ext2_ino_t ino,
|
|
||||||
+ struct ext2_inode * inode, int bufsize,
|
|
||||||
+ int flags)
|
|
||||||
{
|
|
||||||
blk64_t block_nr;
|
|
||||||
dgrp_t group;
|
|
||||||
@@ -850,21 +851,29 @@ errcode_t ext2fs_read_inode_full(ext2_filsys fs, ext2_ino_t ino,
|
|
||||||
}
|
|
||||||
memcpy(inode, iptr, (bufsize > length) ? length : bufsize);
|
|
||||||
|
|
||||||
- if (!(fs->flags & EXT2_FLAG_IGNORE_CSUM_ERRORS) && fail_csum)
|
|
||||||
+ if (!(fs->flags & EXT2_FLAG_IGNORE_CSUM_ERRORS) &&
|
|
||||||
+ !(flags & READ_INODE_NOCSUM) && fail_csum)
|
|
||||||
return EXT2_ET_INODE_CSUM_INVALID;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+errcode_t ext2fs_read_inode_full(ext2_filsys fs, ext2_ino_t ino,
|
|
||||||
+ struct ext2_inode * inode, int bufsize)
|
|
||||||
+{
|
|
||||||
+ return ext2fs_read_inode2(fs, ino, inode, bufsize, 0);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
errcode_t ext2fs_read_inode(ext2_filsys fs, ext2_ino_t ino,
|
|
||||||
struct ext2_inode * inode)
|
|
||||||
{
|
|
||||||
- return ext2fs_read_inode_full(fs, ino, inode,
|
|
||||||
- sizeof(struct ext2_inode));
|
|
||||||
+ return ext2fs_read_inode2(fs, ino, inode,
|
|
||||||
+ sizeof(struct ext2_inode), 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
-errcode_t ext2fs_write_inode_full(ext2_filsys fs, ext2_ino_t ino,
|
|
||||||
- struct ext2_inode * inode, int bufsize)
|
|
||||||
+errcode_t ext2fs_write_inode2(ext2_filsys fs, ext2_ino_t ino,
|
|
||||||
+ struct ext2_inode * inode, int bufsize,
|
|
||||||
+ int flags)
|
|
||||||
{
|
|
||||||
blk64_t block_nr;
|
|
||||||
dgrp_t group;
|
|
||||||
@@ -895,12 +904,9 @@ errcode_t ext2fs_write_inode_full(ext2_filsys fs, ext2_ino_t ino,
|
|
||||||
|
|
||||||
if (bufsize < length) {
|
|
||||||
int old_flags = fs->flags;
|
|
||||||
- fs->flags |= EXT2_FLAG_IGNORE_CSUM_ERRORS;
|
|
||||||
- retval = ext2fs_read_inode_full(fs, ino,
|
|
||||||
- (struct ext2_inode *)w_inode,
|
|
||||||
- length);
|
|
||||||
- fs->flags = (old_flags & EXT2_FLAG_IGNORE_CSUM_ERRORS) |
|
|
||||||
- (fs->flags & ~EXT2_FLAG_IGNORE_CSUM_ERRORS);
|
|
||||||
+ retval = ext2fs_read_inode2(fs, ino,
|
|
||||||
+ (struct ext2_inode *)w_inode,
|
|
||||||
+ length, READ_INODE_NOCSUM);
|
|
||||||
if (retval)
|
|
||||||
goto errout;
|
|
||||||
}
|
|
||||||
@@ -930,9 +936,11 @@ errcode_t ext2fs_write_inode_full(ext2_filsys fs, ext2_ino_t ino,
|
|
||||||
ext2fs_swap_inode_full(fs, w_inode, w_inode, 1, length);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
- retval = ext2fs_inode_csum_set(fs, ino, w_inode);
|
|
||||||
- if (retval)
|
|
||||||
- goto errout;
|
|
||||||
+ if ((flags & WRITE_INODE_NOCSUM) == 0) {
|
|
||||||
+ retval = ext2fs_inode_csum_set(fs, ino, w_inode);
|
|
||||||
+ if (retval)
|
|
||||||
+ goto errout;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
group = (ino - 1) / EXT2_INODES_PER_GROUP(fs->super);
|
|
||||||
offset = ((ino - 1) % EXT2_INODES_PER_GROUP(fs->super)) *
|
|
||||||
@@ -989,11 +997,17 @@ errout:
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
+errcode_t ext2fs_write_inode_full(ext2_filsys fs, ext2_ino_t ino,
|
|
||||||
+ struct ext2_inode * inode, int bufsize)
|
|
||||||
+{
|
|
||||||
+ return ext2fs_write_inode2(fs, ino, inode, bufsize, 0);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
errcode_t ext2fs_write_inode(ext2_filsys fs, ext2_ino_t ino,
|
|
||||||
struct ext2_inode *inode)
|
|
||||||
{
|
|
||||||
- return ext2fs_write_inode_full(fs, ino, inode,
|
|
||||||
- sizeof(struct ext2_inode));
|
|
||||||
+ return ext2fs_write_inode2(fs, ino, inode,
|
|
||||||
+ sizeof(struct ext2_inode), 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
--
|
|
||||||
2.20.1
|
|
||||||
|
|
@ -1,28 +0,0 @@
|
|||||||
From 75fceeee449a3a2ee158fee2a084d383f7360d1e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Eric Biggers <ebiggers@google.com>
|
|
||||||
Date: Sun, 28 Apr 2019 20:37:45 -0400
|
|
||||||
Subject: [PATCH 2/4] libext2fs: remove unused variable 'old_flags'
|
|
||||||
|
|
||||||
In ext2fs_write_inode2(), the 'old_flags' variable is never used.
|
|
||||||
|
|
||||||
Signed-off-by: Eric Biggers <ebiggers@google.com>
|
|
||||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
|
||||||
---
|
|
||||||
lib/ext2fs/inode.c | 1 -
|
|
||||||
1 file changed, 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/lib/ext2fs/inode.c b/lib/ext2fs/inode.c
|
|
||||||
index 2a4be739..75df418d 100644
|
|
||||||
--- a/lib/ext2fs/inode.c
|
|
||||||
+++ b/lib/ext2fs/inode.c
|
|
||||||
@@ -903,7 +903,6 @@ errcode_t ext2fs_write_inode2(ext2_filsys fs, ext2_ino_t ino,
|
|
||||||
return retval;
|
|
||||||
|
|
||||||
if (bufsize < length) {
|
|
||||||
- int old_flags = fs->flags;
|
|
||||||
retval = ext2fs_read_inode2(fs, ino,
|
|
||||||
(struct ext2_inode *)w_inode,
|
|
||||||
length, READ_INODE_NOCSUM);
|
|
||||||
--
|
|
||||||
2.20.1
|
|
||||||
|
|
@ -1,51 +0,0 @@
|
|||||||
From 0e1bff5983c675544e79ee9e449e597f397c15b0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Theodore Ts'o <tytso@mit.edu>
|
|
||||||
Date: Mon, 27 May 2019 19:36:15 -0400
|
|
||||||
Subject: [PATCH] mke2fs: accept the english yes character to the proceed
|
|
||||||
question
|
|
||||||
|
|
||||||
In some cases if the translation file is missing some translations,
|
|
||||||
mke2fs can end up printing an English message, e.g.:
|
|
||||||
|
|
||||||
% LANG=it_IT.UTF-8 ./mke2fs /tmp/foo.img 8M
|
|
||||||
mke2fs 1.45.1 (12-May-2019)
|
|
||||||
/tmp/foo.img contiene un file system ext4
|
|
||||||
created on Mon May 27 19:35:48 2019
|
|
||||||
Proceed anyway? (y,N)
|
|
||||||
|
|
||||||
However, if there is a translation for string to match with "yY"
|
|
||||||
(e.g., to "sS" for Italian), then 'y' won't work. Fix this by falling
|
|
||||||
back to the english 'yY' characters.
|
|
||||||
|
|
||||||
Addresses-Debian-Bug: #907034
|
|
||||||
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
|
||||||
---
|
|
||||||
misc/util.c | 5 ++++-
|
|
||||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/misc/util.c b/misc/util.c
|
|
||||||
index 1d33883d..77991589 100644
|
|
||||||
--- a/misc/util.c
|
|
||||||
+++ b/misc/util.c
|
|
||||||
@@ -91,6 +91,7 @@ void proceed_question(int delay)
|
|
||||||
{
|
|
||||||
char buf[256];
|
|
||||||
const char *short_yes = _("yY");
|
|
||||||
+ const char *english_yes = "yY";
|
|
||||||
|
|
||||||
fflush(stdout);
|
|
||||||
fflush(stderr);
|
|
||||||
@@ -108,7 +109,9 @@ void proceed_question(int delay)
|
|
||||||
fputs(_("Proceed anyway? (y,N) "), stdout);
|
|
||||||
buf[0] = 0;
|
|
||||||
if (!fgets(buf, sizeof(buf), stdin) ||
|
|
||||||
- strchr(short_yes, buf[0]) == 0) {
|
|
||||||
+ strchr(_("nN"), buf[0]) ||
|
|
||||||
+ !(strchr(short_yes, buf[0]) ||
|
|
||||||
+ strchr(english_yes, buf[0]))) {
|
|
||||||
putc('\n', stdout);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.20.1
|
|
||||||
|
|
38
SOURCES/e2fsprogs-1.45.4-Makefile.in-Disable-e2scrub.patch
Normal file
38
SOURCES/e2fsprogs-1.45.4-Makefile.in-Disable-e2scrub.patch
Normal 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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
Summary: Utilities for managing ext2, ext3, and ext4 file systems
|
Summary: Utilities for managing ext2, ext3, and ext4 file systems
|
||||||
Name: e2fsprogs
|
Name: e2fsprogs
|
||||||
Version: 1.44.6
|
Version: 1.45.4
|
||||||
Release: 3%{?dist}
|
Release: 3%{?dist}
|
||||||
|
|
||||||
# License tags based on COPYING file distinctions for various components
|
# License tags based on COPYING file distinctions for various components
|
||||||
@ -27,15 +27,25 @@ BuildRequires: libuuid-devel
|
|||||||
BuildRequires: gettext
|
BuildRequires: gettext
|
||||||
BuildRequires: multilib-rpm-config
|
BuildRequires: multilib-rpm-config
|
||||||
|
|
||||||
Patch0: e2fsprogs-1.44.6-libext2fs-add-ext2fs_-read-write-_inode2.patch
|
Patch0: e2fsprogs-1.45.4-Makefile.in-Disable-e2scrub.patch
|
||||||
Patch1: e2fsprogs-1.44.6-debugfs-fix-set_inode_field-so-it-can-set-the-checks.patch
|
Patch1: e2fsprogs-1.45.4-mke2fs.conf-Disable-fname_encoding-feature.patch
|
||||||
Patch2: e2fsprogs-1.44.6-e2image-add-b-and-B-options-to-specify-where-to-find.patch
|
Patch2: e2fsprogs-1.45.4-Revert-fuse2fs-install-fuse2fs-in-usr-bin-instead-of.patch
|
||||||
Patch3: e2fsprogs-1.44.6-debugfs-fix-printing-of-xattrs-with-ea_in_inode-valu.patch
|
Patch3: e2fsprogs-1.45.4-mke2fs.conf-Introduce-rhel6-and-rhel7-fs_type.patch
|
||||||
Patch4: e2fsprogs-1.44.6-debugfs-remove-unused-variable-tmp_inode.patch
|
Patch4: e2fsprogs-1.45.4-man-Add-note-about-RHEL8-supported-features-and-moun.patch
|
||||||
Patch5: e2fsprogs-1.44.6-libext2fs-remove-unused-variable-old_flags.patch
|
Patch5: e2fsprogs-1.45.5-libext2fs-fix-bug-when-reading-or-writing-more-than-.patch
|
||||||
Patch6: e2fsprogs-1.44.6-e2fsck-check-and-fix-tails-of-all-bitmap-blocks.patch
|
Patch6: e2fsprogs-1.45.5-libext2fs-fix-UBSan-when-updating-an-inline_data-fil.patch
|
||||||
Patch7: e2fsprogs-1.44.6-e2fsck-remove-an-potentially-ambiguous-dangling-else.patch
|
Patch7: e2fsprogs-1.45.5-Fix-UBSan-when-shifting-1LL-63.patch
|
||||||
Patch8: e2fsprogs-1.44.6-mke2fs-accept-the-english-yes-character-to-the-proce.patch
|
Patch8: e2fsprogs-1.45.5-libext2fs-properly-free-the-bitmaps-in-read_bitmap-s.patch
|
||||||
|
Patch9: e2fsprogs-1.45.5-libext2fs-verify-the-block-numbers-for-the-allocatio.patch
|
||||||
|
Patch10: e2fsprogs-1.45.5-tune2fs-prohibit-toggling-uninit_bg-on-live-filesyst.patch
|
||||||
|
Patch11: e2fsprogs-1.45.5-e2fsck-abort-if-there-is-a-corrupted-directory-block.patch
|
||||||
|
Patch12: e2fsprogs-1.45.5-e2fsck-don-t-try-to-rehash-a-deleted-directory.patch
|
||||||
|
Patch13: e2fsprogs-1.45.5-e2fsck-fix-use-after-free-in-calculate_tree.patch
|
||||||
|
Patch14: e2fsprogs-1.45.5-e2fsck-don-t-check-for-future-superblock-times-if-ch.patch
|
||||||
|
Patch15: e2fsprogs-1.45.5-Revert-libext2fs-revamp-bitmap-types-to-fix-LTO-warn.patch
|
||||||
|
Patch16: e2fsprogs-1.45.5-Revert-libext2fs-hide-struct-ext2fs_hashmap-as-an-in.patch
|
||||||
|
Patch17: e2fsprogs-1.45.5-ext2fs-fix-ABI-change-in-the-struct_ext2_filsys-stru.patch
|
||||||
|
Patch18: e2fsprogs-1.45.5-e2fsck-fix-to-return-ENOMEM-in-alloc_size_dir.patch
|
||||||
|
|
||||||
%description
|
%description
|
||||||
The e2fsprogs package contains a number of utilities for creating,
|
The e2fsprogs package contains a number of utilities for creating,
|
||||||
@ -163,6 +173,16 @@ It was originally inspired by the Multics SubSystem library.
|
|||||||
%patch6 -p1
|
%patch6 -p1
|
||||||
%patch7 -p1
|
%patch7 -p1
|
||||||
%patch8 -p1
|
%patch8 -p1
|
||||||
|
%patch9 -p1
|
||||||
|
%patch10 -p1
|
||||||
|
%patch11 -p1
|
||||||
|
%patch12 -p1
|
||||||
|
%patch13 -p1
|
||||||
|
%patch14 -p1
|
||||||
|
%patch15 -p1
|
||||||
|
%patch16 -p1
|
||||||
|
%patch17 -p1
|
||||||
|
%patch18 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%configure CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" \
|
%configure CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" \
|
||||||
@ -325,6 +345,18 @@ exit 0
|
|||||||
%{_libdir}/pkgconfig/ss.pc
|
%{_libdir}/pkgconfig/ss.pc
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Jan 14 2020 Lukas Czerner <lczerner@redhat.com> 1.45.4-3
|
||||||
|
- Fix clang warning introduced in previous release (#1783777)
|
||||||
|
|
||||||
|
* Tue Jan 14 2020 Lukas Czerner <lczerner@redhat.com> 1.45.4-2
|
||||||
|
- Fix ABI breakage introduced in previous release (#1783777)
|
||||||
|
|
||||||
|
* Sun Dec 15 2019 Lukas Czerner <lczerner@redhat.com> 1.45.4-1
|
||||||
|
- Rebase to the release 1.45.4 (#1783777)
|
||||||
|
- provide rhel6/7 compatible fs_type in mke2fs.conf (#1780279)
|
||||||
|
- fix crafted ext4 partition leads to out-of-bounds write (#1768709)
|
||||||
|
- include note about supported rhel8 features and options (#1788573)
|
||||||
|
|
||||||
* Wed May 29 2019 Lukas Czerner <lczerner@redhat.com> 1.44.6-3
|
* Wed May 29 2019 Lukas Czerner <lczerner@redhat.com> 1.44.6-3
|
||||||
- Backport fixes from 1.45.2 (#1714927)
|
- Backport fixes from 1.45.2 (#1714927)
|
||||||
- Fix errors in rpmdiff (#1714923)
|
- Fix errors in rpmdiff (#1714923)
|
||||||
|
Loading…
Reference in New Issue
Block a user