From 12147857a012205dd5b557bfe3d84155e0ee9ddf Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Wed, 25 May 2016 00:51:33 -0400 Subject: [PATCH] Synchronize debian packaging with next Signed-off-by: Theodore Ts'o --- debian/changelog | 4 +- ..._bg-bg-num-checksum-calc-on-64-bit-file-systems | 36 +++++ ...e-error-messages-when-the-journal-sb-is-corrupt | 177 +++++++++++++++++++++ debian/patches/series | 2 + 4 files changed, 217 insertions(+), 2 deletions(-) create mode 100644 debian/patches/debugfs-fix-set_bg-bg-num-checksum-calc-on-64-bit-file-systems create mode 100644 debian/patches/e2fsck-improve-error-messages-when-the-journal-sb-is-corrupt diff --git a/debian/changelog b/debian/changelog index 7dc1800..5aad713 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -e2fsprogs (1.43-3) UNRELEASED; urgency=medium +e2fsprogs (1.43-3) unstable; urgency=medium * Fix various debian packaging nits * Fix spelling mistakes in the copyright files @@ -11,7 +11,7 @@ e2fsprogs (1.43-3) UNRELEASED; urgency=medium systems. * Simplify the debian rules file - -- Theodore Y. Ts'o Sun, 22 May 2016 20:51:29 -0400 + -- Theodore Y. Ts'o Wed, 25 May 2016 00:51:33 -0400 e2fsprogs (1.43-2) unstable; urgency=medium diff --git a/debian/patches/debugfs-fix-set_bg-bg-num-checksum-calc-on-64-bit-file-systems b/debian/patches/debugfs-fix-set_bg-bg-num-checksum-calc-on-64-bit-file-systems new file mode 100644 index 0000000..959d821 --- /dev/null +++ b/debian/patches/debugfs-fix-set_bg-bg-num-checksum-calc-on-64-bit-file-systems @@ -0,0 +1,36 @@ +Description: debugfs: fix "set_bg checksum calc" on 64-bit file systems + +Author: Theodore Ts'o +--- + debugfs/set_fields.c | 11 +++-------- + 1 file changed, 3 insertions(+), 8 deletions(-) + +diff --git a/debugfs/set_fields.c b/debugfs/set_fields.c +index 458bc47..8a4c6a8 100644 +--- a/debugfs/set_fields.c ++++ b/debugfs/set_fields.c +@@ -653,18 +653,13 @@ static errcode_t parse_bmap(struct field_set_info *info, + static errcode_t parse_gd_csum(struct field_set_info *info, char *field, + char *arg) + { ++ __u16 *checksum = info->ptr; + + if (strcmp(arg, "calc") == 0) { +- ext2fs_group_desc_csum_set(current_fs, set_bg); +- memcpy(&set_gd, ext2fs_group_desc(current_fs, +- current_fs->group_desc, +- set_bg), +- sizeof(set_gd)); +- printf("Checksum set to 0x%04x\n", +- ext2fs_bg_checksum(current_fs, set_bg)); ++ *checksum = ext2fs_group_desc_csum(current_fs, set_bg); ++ printf("Checksum set to 0x%04x\n", *checksum); + return 0; + } +- + return parse_uint(info, field, arg); + } + +-- +2.5.0 + diff --git a/debian/patches/e2fsck-improve-error-messages-when-the-journal-sb-is-corrupt b/debian/patches/e2fsck-improve-error-messages-when-the-journal-sb-is-corrupt new file mode 100644 index 0000000..56d4cf1 --- /dev/null +++ b/debian/patches/e2fsck-improve-error-messages-when-the-journal-sb-is-corrupt @@ -0,0 +1,177 @@ +Description: e2fsck: improve error messages when the journal sb is corrupt + If the journal superblock is corrupt and the user declines to fix it + (or runs e2fsck -n), make sure the error messages are clear and + explain that e2fsck cannot (safely) proceed. + . + Addresses-Debian-Bug: #768162 + +Author: Theodore Ts'o +--- + debugfs/journal.c | 12 ++++++------ + e2fsck/journal.c | 24 ++++++++++++------------ + e2fsck/unix.c | 3 ++- + lib/ext2fs/ext2_err.et.in | 3 +++ + 4 files changed, 23 insertions(+), 19 deletions(-) + +diff --git a/debugfs/journal.c b/debugfs/journal.c +index aa6325d..fcd5d5e 100644 +--- a/debugfs/journal.c ++++ b/debugfs/journal.c +@@ -583,7 +583,7 @@ static errcode_t ext2fs_journal_load(journal_t *journal) + case JFS_DESCRIPTOR_BLOCK: + case JFS_COMMIT_BLOCK: + case JFS_REVOKE_BLOCK: +- return EXT2_ET_CORRUPT_SUPERBLOCK; ++ return EXT2_ET_CORRUPT_JOURNAL_SB; + + /* If we don't understand the superblock major type, but there + * is a magic number, then it is likely to be a new format we +@@ -600,15 +600,15 @@ static errcode_t ext2fs_journal_load(journal_t *journal) + + /* Checksum v1-3 are mutually exclusive features. */ + if (jfs_has_feature_csum2(journal) && jfs_has_feature_csum3(journal)) +- return EXT2_ET_CORRUPT_SUPERBLOCK; ++ return EXT2_ET_CORRUPT_JOURNAL_SB; + + if (journal_has_csum_v2or3(journal) && + jfs_has_feature_checksum(journal)) +- return EXT2_ET_CORRUPT_SUPERBLOCK; ++ return EXT2_ET_CORRUPT_JOURNAL_SB; + + if (!ext2fs_journal_verify_csum_type(journal, jsb) || + !ext2fs_journal_sb_csum_verify(journal, jsb)) +- return EXT2_ET_CORRUPT_SUPERBLOCK; ++ return EXT2_ET_CORRUPT_JOURNAL_SB; + + if (journal_has_csum_v2or3(journal)) + journal->j_csum_seed = jbd2_chksum(journal, ~0, jsb->s_uuid, +@@ -618,12 +618,12 @@ static errcode_t ext2fs_journal_load(journal_t *journal) + * format to be able to proceed safely, so any other checks that + * fail we should attempt to recover from. */ + if (jsb->s_blocksize != htonl(journal->j_blocksize)) +- return EXT2_ET_CORRUPT_SUPERBLOCK; ++ return EXT2_ET_CORRUPT_JOURNAL_SB; + + if (ntohl(jsb->s_maxlen) < journal->j_maxlen) + journal->j_maxlen = ntohl(jsb->s_maxlen); + else if (ntohl(jsb->s_maxlen) > journal->j_maxlen) +- return EXT2_ET_CORRUPT_SUPERBLOCK; ++ return EXT2_ET_CORRUPT_JOURNAL_SB; + + journal->j_tail_sequence = ntohl(jsb->s_sequence); + journal->j_transaction_sequence = journal->j_tail_sequence; +diff --git a/e2fsck/journal.c b/e2fsck/journal.c +index c8ac57d..b4c82b3 100644 +--- a/e2fsck/journal.c ++++ b/e2fsck/journal.c +@@ -550,7 +550,7 @@ static errcode_t e2fsck_journal_fix_bad_inode(e2fsck_t ctx, + e2fsck_clear_recover(ctx, 1); + return 0; + } +- return EXT2_ET_BAD_INODE_NUM; ++ return EXT2_ET_CORRUPT_JOURNAL_SB; + } else if (recover) { + if (fix_problem(ctx, PR_0_JOURNAL_RECOVER_SET, pctx)) { + e2fsck_clear_recover(ctx, 1); +@@ -627,7 +627,7 @@ static errcode_t e2fsck_journal_load(journal_t *journal) + case JFS_DESCRIPTOR_BLOCK: + case JFS_COMMIT_BLOCK: + case JFS_REVOKE_BLOCK: +- return EXT2_ET_CORRUPT_SUPERBLOCK; ++ return EXT2_ET_CORRUPT_JOURNAL_SB; + + /* If we don't understand the superblock major type, but there + * is a magic number, then it is likely to be a new format we +@@ -644,15 +644,15 @@ static errcode_t e2fsck_journal_load(journal_t *journal) + + /* Checksum v1-3 are mutually exclusive features. */ + if (jfs_has_feature_csum2(journal) && jfs_has_feature_csum3(journal)) +- return EXT2_ET_CORRUPT_SUPERBLOCK; ++ return EXT2_ET_CORRUPT_JOURNAL_SB; + + if (journal_has_csum_v2or3(journal) && + jfs_has_feature_checksum(journal)) +- return EXT2_ET_CORRUPT_SUPERBLOCK; ++ return EXT2_ET_CORRUPT_JOURNAL_SB; + + if (!e2fsck_journal_verify_csum_type(journal, jsb) || + !e2fsck_journal_sb_csum_verify(journal, jsb)) +- return EXT2_ET_CORRUPT_SUPERBLOCK; ++ return EXT2_ET_CORRUPT_JOURNAL_SB; + + if (journal_has_csum_v2or3(journal)) + journal->j_csum_seed = jbd2_chksum(journal, ~0, jsb->s_uuid, +@@ -662,19 +662,19 @@ static errcode_t e2fsck_journal_load(journal_t *journal) + * format to be able to proceed safely, so any other checks that + * fail we should attempt to recover from. */ + if (jsb->s_blocksize != htonl(journal->j_blocksize)) { +- com_err(ctx->program_name, EXT2_ET_CORRUPT_SUPERBLOCK, ++ com_err(ctx->program_name, EXT2_ET_CORRUPT_JOURNAL_SB, + _("%s: no valid journal superblock found\n"), + ctx->device_name); +- return EXT2_ET_CORRUPT_SUPERBLOCK; ++ return EXT2_ET_CORRUPT_JOURNAL_SB; + } + + if (ntohl(jsb->s_maxlen) < journal->j_maxlen) + journal->j_maxlen = ntohl(jsb->s_maxlen); + else if (ntohl(jsb->s_maxlen) > journal->j_maxlen) { +- com_err(ctx->program_name, EXT2_ET_CORRUPT_SUPERBLOCK, ++ com_err(ctx->program_name, EXT2_ET_CORRUPT_JOURNAL_SB, + _("%s: journal too short\n"), + ctx->device_name); +- return EXT2_ET_CORRUPT_SUPERBLOCK; ++ return EXT2_ET_CORRUPT_JOURNAL_SB; + } + + journal->j_tail_sequence = ntohl(jsb->s_sequence); +@@ -746,9 +746,9 @@ static errcode_t e2fsck_journal_fix_corrupt_super(e2fsck_t ctx, + e2fsck_clear_recover(ctx, recover); + return 0; + } +- return EXT2_ET_CORRUPT_SUPERBLOCK; ++ return EXT2_ET_CORRUPT_JOURNAL_SB; + } else if (e2fsck_journal_fix_bad_inode(ctx, pctx)) +- return EXT2_ET_CORRUPT_SUPERBLOCK; ++ return EXT2_ET_CORRUPT_JOURNAL_SB; + + return 0; + } +@@ -820,7 +820,7 @@ errcode_t e2fsck_check_ext3_journal(e2fsck_t ctx) + + retval = e2fsck_journal_load(journal); + if (retval) { +- if ((retval == EXT2_ET_CORRUPT_SUPERBLOCK) || ++ if ((retval == EXT2_ET_CORRUPT_JOURNAL_SB) || + ((retval == EXT2_ET_UNSUPP_FEATURE) && + (!fix_problem(ctx, PR_0_JOURNAL_UNSUPP_INCOMPAT, + &pctx))) || +diff --git a/e2fsck/unix.c b/e2fsck/unix.c +index 004a6e5..f9409f7 100644 +--- a/e2fsck/unix.c ++++ b/e2fsck/unix.c +@@ -1647,7 +1647,8 @@ failure: + com_err(ctx->program_name, retval, + _("while checking journal for %s"), + ctx->device_name); +- fatal_error(ctx, 0); ++ fatal_error(ctx, ++ _("Cannot proceed with file system check")); + } + } + +diff --git a/lib/ext2fs/ext2_err.et.in b/lib/ext2fs/ext2_err.et.in +index 464c01f..2a109ca 100644 +--- a/lib/ext2fs/ext2_err.et.in ++++ b/lib/ext2fs/ext2_err.et.in +@@ -536,4 +536,7 @@ ec EXT2_ET_FILESYSTEM_CORRUPTED, + ec EXT2_ET_BAD_CRC, + "Bad CRC detected in file system" + ++ec EXT2_ET_CORRUPT_JOURNAL_SB, ++ "The journal superblock is corrupt" ++ + end +-- +2.5.0 + diff --git a/debian/patches/series b/debian/patches/series index 7941371..bc089b5 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -5,3 +5,5 @@ e2fsck-use-com_err-error-codes-instead-of-EBADMSG-et-al mke2fs-fix-project-quota-creation e2fsck-fix-project-quota-support add-enable-hardening-which-builds-e2fsprogs-with-security-options +e2fsck-improve-error-messages-when-the-journal-sb-is-corrupt +debugfs-fix-set_bg-bg-num-checksum-calc-on-64-bit-file-systems -- 1.8.3.1