On Sat, Jun 04, 2016 at 05:32:08PM +0100, Adam D. Barratt wrote: > For future reference, the generally expected workflow for fixes in > stable is to file this bug _first_, attaching a proposed debdiff which > is then discussed before any uploads occur. (Had that happened, we'd > also likely have requested that the package version be 1.42.12-1.1 > +deb8u1.)
Sorry for the process screwup. Enclosed please find the debdiff. I'm happy to adjust and reupload if you would prefer. Cheers, - Ted diff -Nru e2fsprogs-1.42.12/debian/changelog e2fsprogs-1.42.12/debian/changelog --- e2fsprogs-1.42.12/debian/changelog 2015-02-21 21:18:20.000000000 -0500 +++ e2fsprogs-1.42.12/debian/changelog 2016-06-04 12:05:58.000000000 -0400 @@ -1,3 +1,12 @@ +e2fsprogs (1.42.12-2) jessie; urgency=medium + + * NMU acknowledge (closes: #778948) + * Disable prompts for time skew which is fudged in e2fsck (closes: #812141) + * Fix potential corruption of Hurd file systems by e2fsck + * Fix pointer bugs that could cause crashes in e2fsck and resize2fs + + -- Theodore Y. Ts'o <ty...@mit.edu> Sat, 04 Jun 2016 11:58:06 -0400 + e2fsprogs (1.42.12-1.1) unstable; urgency=high * Non-maintainer upload by the Security Team. diff -Nru e2fsprogs-1.42.12/debian/patches/e2fsck-fix-corruption-of-Hurd-filesystems.patch e2fsprogs-1.42.12/debian/patches/e2fsck-fix-corruption-of-Hurd-filesystems.patch --- e2fsprogs-1.42.12/debian/patches/e2fsck-fix-corruption-of-Hurd-filesystems.patch 1969-12-31 19:00:00.000000000 -0500 +++ e2fsprogs-1.42.12/debian/patches/e2fsck-fix-corruption-of-Hurd-filesystems.patch 2016-06-04 11:51:11.000000000 -0400 @@ -0,0 +1,72 @@ +From 36769c606c270094df0431cbcab9932905adcedc Mon Sep 17 00:00:00 2001 +From: Justus Winter <4win...@informatik.uni-hamburg.de> +Date: Fri, 23 Jan 2015 10:15:57 -0500 +Subject: [PATCH] e2fsck: fix corruption of Hurd filesystems + +Previously, e2fsck accessed the field osd2.linux2.l_i_file_acl_high +field without checking that the filesystem is indeed created for +Linux. This lead to e2fsck constantly complaining about certain +nodes: + +i_file_acl_hi for inode XXX (/dev/console) is 32, should be zero. + +By "correcting" this problem, e2fsck would clobber the field +osd2.hurd2.h_i_mode_high. + +Properly guard access to the OS dependent fields. + +Signed-off-by: Theodore Ts'o <ty...@mit.edu> +--- + e2fsck/pass1.c | 14 ++++++++------ + e2fsck/pass2.c | 3 ++- + 2 files changed, 10 insertions(+), 7 deletions(-) + +diff --git a/e2fsck/pass1.c b/e2fsck/pass1.c +index 50a8b99..3bf481f 100644 +--- a/e2fsck/pass1.c ++++ b/e2fsck/pass1.c +@@ -1082,7 +1082,8 @@ void e2fsck_pass1(e2fsck_t ctx) + if (inode->i_faddr || frag || fsize || + (LINUX_S_ISDIR(inode->i_mode) && inode->i_dir_acl)) + mark_inode_bad(ctx, ino); +- if (!(fs->super->s_feature_incompat & ++ if ((fs->super->s_creator_os == EXT2_OS_LINUX) && ++ !(fs->super->s_feature_incompat & + EXT4_FEATURE_INCOMPAT_64BIT) && + inode->osd2.linux2.l_i_file_acl_high != 0) + mark_inode_bad(ctx, ino); +@@ -2354,11 +2355,12 @@ static void check_blocks(e2fsck_t ctx, struct problem_context *pctx, + if (LINUX_S_ISREG(inode->i_mode) && + ext2fs_needs_large_file_feature(EXT2_I_SIZE(inode))) + ctx->large_files++; +- if ((pb.num_blocks != ext2fs_inode_i_blocks(fs, inode)) || +- ((fs->super->s_feature_ro_compat & +- EXT4_FEATURE_RO_COMPAT_HUGE_FILE) && +- (inode->i_flags & EXT4_HUGE_FILE_FL) && +- (inode->osd2.linux2.l_i_blocks_hi != 0))) { ++ if ((fs->super->s_creator_os == EXT2_OS_LINUX) && ++ ((pb.num_blocks != ext2fs_inode_i_blocks(fs, inode)) || ++ ((fs->super->s_feature_ro_compat & ++ EXT4_FEATURE_RO_COMPAT_HUGE_FILE) && ++ (inode->i_flags & EXT4_HUGE_FILE_FL) && ++ (inode->osd2.linux2.l_i_blocks_hi != 0)))) { + pctx->num = pb.num_blocks; + if (fix_problem(ctx, PR_1_BAD_I_BLOCKS, pctx)) { + inode->i_blocks = pb.num_blocks; +diff --git a/e2fsck/pass2.c b/e2fsck/pass2.c +index ddfe2eb..4acddae 100644 +--- a/e2fsck/pass2.c ++++ b/e2fsck/pass2.c +@@ -1365,7 +1365,8 @@ int e2fsck_process_bad_inode(e2fsck_t ctx, ext2_ino_t dir, + } + } + +- if (!(fs->super->s_feature_incompat & ++ if ((fs->super->s_creator_os == EXT2_OS_LINUX) && ++ !(fs->super->s_feature_incompat & + EXT4_FEATURE_INCOMPAT_64BIT) && + inode.osd2.linux2.l_i_file_acl_high != 0) { + pctx.num = inode.osd2.linux2.l_i_file_acl_high; +-- +2.5.0 + diff -Nru e2fsprogs-1.42.12/debian/patches/e2fsck-fix-dangling-pointer-when-dir_info-array-is-resized.patch e2fsprogs-1.42.12/debian/patches/e2fsck-fix-dangling-pointer-when-dir_info-array-is-resized.patch --- e2fsprogs-1.42.12/debian/patches/e2fsck-fix-dangling-pointer-when-dir_info-array-is-resized.patch 1969-12-31 19:00:00.000000000 -0500 +++ e2fsprogs-1.42.12/debian/patches/e2fsck-fix-dangling-pointer-when-dir_info-array-is-resized.patch 2016-06-04 11:52:26.000000000 -0400 @@ -0,0 +1,51 @@ +From beec19ff21d41c84dbbc2ab8d0df25147912ff59 Mon Sep 17 00:00:00 2001 +From: "Darrick J. Wong" <darrick.w...@oracle.com> +Date: Wed, 5 Nov 2014 11:14:26 -0500 +Subject: [PATCH] e2fsck: fix dangling pointer when dir_info array is resized + +e2fsck uses an array to store directory usage information during pass +3; the usage context also contains a pointer to the last directory +looked up. When expanding the dir_info array, this cache pointer +needs to be cleared if the array resize changed the pointer location, +or else we'll later walk off the end of this dead pointer. + +Signed-off-by: Darrick J. Wong <darrick.w...@oracle.com> +Reported-by: Sami Liedes <sami.lie...@iki.fi> +Signed-off-by: Theodore Ts'o <ty...@mit.edu> +--- + e2fsck/dirinfo.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/e2fsck/dirinfo.c b/e2fsck/dirinfo.c +index 4a9019b..dab5a13 100644 +--- a/e2fsck/dirinfo.c ++++ b/e2fsck/dirinfo.c +@@ -121,7 +121,7 @@ static void setup_db(e2fsck_t ctx) + void e2fsck_add_dir_info(e2fsck_t ctx, ext2_ino_t ino, ext2_ino_t parent) + { + struct dir_info_db *db; +- struct dir_info *dir, ent; ++ struct dir_info *dir, ent, *old_array; + int i, j; + errcode_t retval; + unsigned long old_size; +@@ -136,6 +136,7 @@ void e2fsck_add_dir_info(e2fsck_t ctx, ext2_ino_t ino, ext2_ino_t parent) + if (ctx->dir_info->count >= ctx->dir_info->size) { + old_size = ctx->dir_info->size * sizeof(struct dir_info); + ctx->dir_info->size += 10; ++ old_array = ctx->dir_info->array; + retval = ext2fs_resize_mem(old_size, ctx->dir_info->size * + sizeof(struct dir_info), + &ctx->dir_info->array); +@@ -147,6 +148,8 @@ void e2fsck_add_dir_info(e2fsck_t ctx, ext2_ino_t ino, ext2_ino_t parent) + ctx->dir_info->size -= 10; + return; + } ++ if (old_array != ctx->dir_info->array) ++ ctx->dir_info->last_lookup = NULL; + } + + ent.ino = ino; +-- +2.5.0 + diff -Nru e2fsprogs-1.42.12/debian/patches/e2fsck-fix-free-pointer-dereferences.patch e2fsprogs-1.42.12/debian/patches/e2fsck-fix-free-pointer-dereferences.patch --- e2fsprogs-1.42.12/debian/patches/e2fsck-fix-free-pointer-dereferences.patch 1969-12-31 19:00:00.000000000 -0500 +++ e2fsprogs-1.42.12/debian/patches/e2fsck-fix-free-pointer-dereferences.patch 2016-06-04 11:55:26.000000000 -0400 @@ -0,0 +1,49 @@ +From ebdf895b43a1ce499e4d2556a201e2a753fc422f Mon Sep 17 00:00:00 2001 +From: Theodore Ts'o <ty...@mit.edu> +Date: Wed, 8 Oct 2014 11:18:41 -0400 +Subject: [PATCH 2/2] e2fsck: fix free pointer dereferences + +Commit 47fee2ef6a23a introduces some free pointer dereference bugs by +not clearing ctx->fs after calling ext2fs_close_free(). + +Reported-by: Matthias Andree <mand...@freebsd.org> +Cc: Lukas Czerner <lczer...@redhat.com> +Signed-off-by: Theodore Ts'o <ty...@mit.edu> +--- + e2fsck/unix.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/e2fsck/unix.c b/e2fsck/unix.c +index 66debcd..10036e7 100644 +--- a/e2fsck/unix.c ++++ b/e2fsck/unix.c +@@ -458,7 +458,7 @@ static void check_if_skip(e2fsck_t ctx) + } + log_out(ctx, "\n"); + skip: +- ext2fs_close_free(&fs); ++ ext2fs_close_free(&ctx->fs); + e2fsck_free_context(ctx); + exit(FSCK_OK); + } +@@ -1462,7 +1462,7 @@ failure: + /* + * Restart in order to reopen fs but this time start mmp. + */ +- ext2fs_close_free(&fs); ++ ext2fs_close_free(&ctx->fs); + flags &= ~EXT2_FLAG_SKIP_MMP; + goto restart; + } +@@ -1692,7 +1692,7 @@ no_journal: + _("while resetting context")); + fatal_error(ctx, 0); + } +- ext2fs_close_free(&fs); ++ ext2fs_close_free(&ctx->fs); + goto restart; + } + if (run_result & E2F_FLAG_ABORT) +-- +2.5.0 + diff -Nru e2fsprogs-1.42.12/debian/patches/e2fsck-use-PROMPT_NONE-for-FUTURE_SB_LAST_-_FUDGED-problems.patch e2fsprogs-1.42.12/debian/patches/e2fsck-use-PROMPT_NONE-for-FUTURE_SB_LAST_-_FUDGED-problems.patch --- e2fsprogs-1.42.12/debian/patches/e2fsck-use-PROMPT_NONE-for-FUTURE_SB_LAST_-_FUDGED-problems.patch 1969-12-31 19:00:00.000000000 -0500 +++ e2fsprogs-1.42.12/debian/patches/e2fsck-use-PROMPT_NONE-for-FUTURE_SB_LAST_-_FUDGED-problems.patch 2016-06-04 11:47:18.000000000 -0400 @@ -0,0 +1,41 @@ +From f096708126412c0569e40cfbd5740729976bf12a Mon Sep 17 00:00:00 2001 +From: Theodore Ts'o <ty...@mit.edu> +Date: Sat, 28 Mar 2015 21:39:54 -0400 +Subject: [PATCH] e2fsck: use PROMPT_NONE for FUTURE_SB_LAST_*_FUDGED problems + +This allows us to print a message warning the user that there is +something funny going on with their hardware clock (probably time zone +issues caused by trying to be compatible with legacy OS's such as +Windows), without triggering a full file system check. + +Signed-off-by: Theodore Ts'o <ty...@mit.edu> +--- + e2fsck/problem.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/e2fsck/problem.c b/e2fsck/problem.c +index 12cf836..f442a33 100644 +--- a/e2fsck/problem.c ++++ b/e2fsck/problem.c +@@ -386,14 +386,14 @@ static struct e2fsck_problem problem_table[] = { + /* Last mount time is in the future (fudged) */ + { PR_0_FUTURE_SB_LAST_MOUNT_FUDGED, + N_("@S last mount time is in the future.\n\t(by less than a day, " +- "probably due to the hardware clock being incorrectly set) "), +- PROMPT_FIX, PR_PREEN_OK | PR_NO_OK }, ++ "probably due to the hardware clock being incorrectly set)\n"), ++ PROMPT_NONE, PR_PREEN_OK | PR_NO_OK }, + + /* Last write time is in the future (fudged) */ + { PR_0_FUTURE_SB_LAST_WRITE_FUDGED, + N_("@S last write time is in the future.\n\t(by less than a day, " +- "probably due to the hardware clock being incorrectly set). "), +- PROMPT_FIX, PR_PREEN_OK | PR_NO_OK }, ++ "probably due to the hardware clock being incorrectly set)\n"), ++ PROMPT_NONE, PR_PREEN_OK | PR_NO_OK }, + + /* Block group checksum (latch question) is invalid. */ + { PR_0_GDT_CSUM_LATCH, +-- +2.5.0 + diff -Nru e2fsprogs-1.42.12/debian/patches/resize2fs-fix-fs-blocksize-dereference-after-fs-has-been-freed.patch e2fsprogs-1.42.12/debian/patches/resize2fs-fix-fs-blocksize-dereference-after-fs-has-been-freed.patch --- e2fsprogs-1.42.12/debian/patches/resize2fs-fix-fs-blocksize-dereference-after-fs-has-been-freed.patch 1969-12-31 19:00:00.000000000 -0500 +++ e2fsprogs-1.42.12/debian/patches/resize2fs-fix-fs-blocksize-dereference-after-fs-has-been-freed.patch 2016-06-04 11:55:35.000000000 -0400 @@ -0,0 +1,92 @@ +From deae5e809b524a3cca3ecf66be28058134575a02 Mon Sep 17 00:00:00 2001 +From: Theodore Ts'o <ty...@mit.edu> +Date: Wed, 8 Oct 2014 12:09:35 -0400 +Subject: [PATCH] resize2fs: fix fs->blocksize dereference after fs has been + freed + +Commit 77255cf36944b introduced a use after free bug. + +Signed-off-by: Theodore Ts'o <ty...@mit.edu> +--- + resize/main.c | 18 ++++++++++-------- + 1 file changed, 10 insertions(+), 8 deletions(-) + +diff --git a/resize/main.c b/resize/main.c +index c107028..983d8c2 100644 +--- a/resize/main.c ++++ b/resize/main.c +@@ -181,6 +181,7 @@ int main (int argc, char ** argv) + ext2fs_struct_stat st_buf; + __s64 new_file_size; + unsigned int sys_page_size = 4096; ++ unsigned int blocksize; + long sysval; + int len, mount_flags; + char *mtpt; +@@ -366,7 +367,8 @@ int main (int argc, char ** argv) + * defaults and for making sure the new filesystem doesn't + * exceed the partition size. + */ +- retval = ext2fs_get_device_size2(device_name, fs->blocksize, ++ blocksize = fs->blocksize; ++ retval = ext2fs_get_device_size2(device_name, blocksize, + &max_size); + if (retval) { + com_err(program_name, retval, "%s", +@@ -386,8 +388,8 @@ int main (int argc, char ** argv) + } else { + new_size = max_size; + /* Round down to an even multiple of a pagesize */ +- if (sys_page_size > fs->blocksize) +- new_size &= ~((sys_page_size / fs->blocksize)-1); ++ if (sys_page_size > blocksize) ++ new_size &= ~((sys_page_size / blocksize)-1); + } + if (!EXT2_HAS_INCOMPAT_FEATURE(fs->super, + EXT4_FEATURE_INCOMPAT_64BIT)) { +@@ -423,7 +425,7 @@ int main (int argc, char ** argv) + * automatically extend it in a sparse fashion by writing the + * last requested block. + */ +- new_file_size = ((__u64) new_size) * fs->blocksize; ++ new_file_size = ((__u64) new_size) * blocksize; + if ((__u64) new_file_size > + (((__u64) 1) << (sizeof(st_buf.st_size)*8 - 1)) - 1) + fd = -1; +@@ -437,13 +439,13 @@ int main (int argc, char ** argv) + fprintf(stderr, _("The containing partition (or device)" + " is only %llu (%dk) blocks.\nYou requested a new size" + " of %llu blocks.\n\n"), max_size, +- fs->blocksize / 1024, new_size); ++ blocksize / 1024, new_size); + exit(1); + } + if (new_size == ext2fs_blocks_count(fs->super)) { + fprintf(stderr, _("The filesystem is already %llu (%dk) " + "blocks long. Nothing to do!\n\n"), new_size, +- fs->blocksize / 1024); ++ blocksize / 1024); + exit(0); + } + if (mount_flags & EXT2_MF_MOUNTED) { +@@ -453,7 +455,7 @@ int main (int argc, char ** argv) + bigalloc_check(fs, force); + printf(_("Resizing the filesystem on " + "%s to %llu (%dk) blocks.\n"), +- device_name, new_size, fs->blocksize / 1024); ++ device_name, new_size, blocksize / 1024); + retval = resize_fs(fs, &new_size, flags, + ((flags & RESIZE_PERCENT_COMPLETE) ? + resize_progress_func : 0)); +@@ -470,7 +472,7 @@ int main (int argc, char ** argv) + exit(1); + } + printf(_("The filesystem on %s is now %llu (%dk) blocks long.\n\n"), +- device_name, new_size, fs->blocksize / 1024); ++ device_name, new_size, blocksize / 1024); + + if ((st_buf.st_size > new_file_size) && + (fd > 0)) { +-- +2.5.0 + diff -Nru e2fsprogs-1.42.12/debian/patches/series e2fsprogs-1.42.12/debian/patches/series --- e2fsprogs-1.42.12/debian/patches/series 2015-02-21 21:18:20.000000000 -0500 +++ e2fsprogs-1.42.12/debian/patches/series 2016-06-04 11:56:54.000000000 -0400 @@ -1 +1,6 @@ CVE-2015-1572.patch +e2fsck-use-PROMPT_NONE-for-FUTURE_SB_LAST_-_FUDGED-problems.patch +e2fsck-fix-corruption-of-Hurd-filesystems.patch +e2fsck-fix-dangling-pointer-when-dir_info-array-is-resized.patch +e2fsck-fix-free-pointer-dereferences.patch +resize2fs-fix-fs-blocksize-dereference-after-fs-has-been-freed.patch