Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 8 Oct 2014 17:33:26 +0000 (UTC)
From:      Matthias Andree <mandree@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r370472 - in head/sysutils/e2fsprogs: . files
Message-ID:  <201410081733.s98HXQkf012239@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mandree
Date: Wed Oct  8 17:33:25 2014
New Revision: 370472
URL: https://svnweb.freebsd.org/changeset/ports/370472
QAT: https://qat.redports.org/buildarchive/r370472/

Log:
  Unbreak port:
  - Refresh old patches to avoid fuzz.
  - Add two upstream patches to fix the use-after-free() issue.
  - There seem to be double-free() issues left but these do not show during
    self-test, only under valgrind instrumentation so we'll move the port
    ahead and get packages while working with upstream to debug this through
    the end.
  - Bump PORTREVISION to 1.

Added:
  head/sysutils/e2fsprogs/files/patch-zzz-f38676c3e4001359b96576204e9024557ef5fd1b   (contents, props changed)
  head/sysutils/e2fsprogs/files/patch-zzz-f8d3d1661885a07ac9ef639dda0ce23d181a2c73   (contents, props changed)
Modified:
  head/sysutils/e2fsprogs/Makefile
  head/sysutils/e2fsprogs/files/patch-e2fsck__unix.c
  head/sysutils/e2fsprogs/files/patch-lib__ext2fs__ext2_fs.h
  head/sysutils/e2fsprogs/files/patch-lib__ext2fs__tdb.c
  head/sysutils/e2fsprogs/files/patch-lib__ext2fs__tst_bitops.c
  head/sysutils/e2fsprogs/files/patch-lib__uuid__gen_uuid.c
  head/sysutils/e2fsprogs/files/patch-misc__Makefile.in
  head/sysutils/e2fsprogs/files/patch-misc__tune2fs.c

Modified: head/sysutils/e2fsprogs/Makefile
==============================================================================
--- head/sysutils/e2fsprogs/Makefile	Wed Oct  8 17:24:36 2014	(r370471)
+++ head/sysutils/e2fsprogs/Makefile	Wed Oct  8 17:33:25 2014	(r370472)
@@ -3,7 +3,7 @@
 
 PORTNAME=	e2fsprogs
 PORTVERSION=	1.42.12
-PORTREVISION?=	0
+PORTREVISION?=	1
 CATEGORIES?=	sysutils
 MASTER_SITES=	KERNEL_ORG/linux/kernel/people/tytso/${PORTNAME}/v${PORTVERSION}
 
@@ -14,7 +14,6 @@ LICENSE=	GPLv2
 
 PORTSCOUT=	ignore	# cannot handle the version in the directory
 
-PATCH_STRIP=	-p1
 USES=		gmake pkgconfig tar:xz
 USE_CSTD=	gnu99
 USE_LDCONFIG=	yes
@@ -80,16 +79,6 @@ post-patch::
 .endfor
 
 .if ${MASTERDIR} == ${.CURDIR}
-# Regression that apparently causes use-after-free in 
-# http://git.kernel.org/cgit/fs/ext2/e2fsprogs.git/commit/?h=maint&id=47fee2ef6a23ae06f680336ffde57caa64604a4c
-# and can be reproduced under MALLOC_OPTIONS=J regime on 9.3-amd64, or
-# alternatively confirmed with valgrind, was reported upstream.
-#
-# Let's wait until 2014-10-15 whether upstream provides a fix,
-# else we'll bump PORTEPOCH and roll back to 1.42.10;
-# 1.42.11 is also faulty.
-BROKEN=		Use-after-free bug, see ${.CURDIR}/Makefile comments for details
-
 pre-build:
 # fix up Makefile ordering for parallel builds
 	cd ${WRKSRC}/lib/et && ${DO_MAKE_BUILD} compile_et

Modified: head/sysutils/e2fsprogs/files/patch-e2fsck__unix.c
==============================================================================
--- head/sysutils/e2fsprogs/files/patch-e2fsck__unix.c	Wed Oct  8 17:24:36 2014	(r370471)
+++ head/sysutils/e2fsprogs/files/patch-e2fsck__unix.c	Wed Oct  8 17:33:25 2014	(r370472)
@@ -1,5 +1,5 @@
---- ./e2fsck/unix.c.orig	2013-12-29 05:18:02.000000000 +0100
-+++ ./e2fsck/unix.c	2014-01-06 23:26:48.000000000 +0100
+--- e2fsck/unix.c.orig	2014-08-12 18:19:37 UTC
++++ e2fsck/unix.c
 @@ -9,8 +9,6 @@
   * %End-Header%
   */
@@ -18,7 +18,7 @@
  #endif
  #ifdef HAVE_SYS_TYPES_H
  #include <sys/types.h>
-@@ -584,6 +582,24 @@
+@@ -590,6 +588,24 @@
  	return 0;
  }
  
@@ -43,7 +43,7 @@
  #define PATH_SET "PATH=/sbin"
  
  /*
-@@ -616,6 +632,17 @@
+@@ -622,6 +638,17 @@
  	ctx->progress = e2fsck_update_progress;
  }
  
@@ -61,7 +61,7 @@
  static void signal_progress_off(int sig EXT2FS_ATTR((unused)))
  {
  	e2fsck_t ctx = e2fsck_global_ctx;
-@@ -995,6 +1022,8 @@
+@@ -1001,6 +1028,8 @@
  	sigaction(SIGUSR1, &sa, 0);
  	sa.sa_handler = signal_progress_off;
  	sigaction(SIGUSR2, &sa, 0);

Modified: head/sysutils/e2fsprogs/files/patch-lib__ext2fs__ext2_fs.h
==============================================================================
--- head/sysutils/e2fsprogs/files/patch-lib__ext2fs__ext2_fs.h	Wed Oct  8 17:24:36 2014	(r370471)
+++ head/sysutils/e2fsprogs/files/patch-lib__ext2fs__ext2_fs.h	Wed Oct  8 17:33:25 2014	(r370472)
@@ -1,6 +1,6 @@
---- ./lib/ext2fs/ext2_fs.h.orig	2013-12-29 05:18:02.000000000 +0100
-+++ ./lib/ext2fs/ext2_fs.h	2014-01-06 23:26:48.000000000 +0100
-@@ -456,7 +456,7 @@
+--- lib/ext2fs/ext2_fs.h.orig	2014-08-02 20:26:22 UTC
++++ lib/ext2fs/ext2_fs.h
+@@ -461,7 +461,7 @@
  
  #define i_dir_acl	i_size_high
  

Modified: head/sysutils/e2fsprogs/files/patch-lib__ext2fs__tdb.c
==============================================================================
--- head/sysutils/e2fsprogs/files/patch-lib__ext2fs__tdb.c	Wed Oct  8 17:24:36 2014	(r370471)
+++ head/sysutils/e2fsprogs/files/patch-lib__ext2fs__tdb.c	Wed Oct  8 17:33:25 2014	(r370472)
@@ -1,5 +1,5 @@
---- ./lib/ext2fs/tdb.c.orig	2012-07-06 15:37:27.000000000 +0200
-+++ ./lib/ext2fs/tdb.c	2014-01-06 23:26:48.000000000 +0100
+--- lib/ext2fs/tdb.c.orig	2014-06-25 19:19:40 UTC
++++ lib/ext2fs/tdb.c
 @@ -36,7 +36,6 @@
  #define HAVE_UTIME_H
  #define HAVE_UTIME

Modified: head/sysutils/e2fsprogs/files/patch-lib__ext2fs__tst_bitops.c
==============================================================================
--- head/sysutils/e2fsprogs/files/patch-lib__ext2fs__tst_bitops.c	Wed Oct  8 17:24:36 2014	(r370471)
+++ head/sysutils/e2fsprogs/files/patch-lib__ext2fs__tst_bitops.c	Wed Oct  8 17:33:25 2014	(r370472)
@@ -1,5 +1,5 @@
---- ./lib/ext2fs/tst_bitops.c.orig	2012-07-06 15:37:27.000000000 +0200
-+++ ./lib/ext2fs/tst_bitops.c	2014-01-06 23:26:48.000000000 +0100
+--- lib/ext2fs/tst_bitops.c.orig	2014-06-25 19:19:15 UTC
++++ lib/ext2fs/tst_bitops.c
 @@ -104,7 +104,7 @@
  	bigarray = malloc(1 << 29);
  	if (!bigarray) {

Modified: head/sysutils/e2fsprogs/files/patch-lib__uuid__gen_uuid.c
==============================================================================
--- head/sysutils/e2fsprogs/files/patch-lib__uuid__gen_uuid.c	Wed Oct  8 17:24:36 2014	(r370471)
+++ head/sysutils/e2fsprogs/files/patch-lib__uuid__gen_uuid.c	Wed Oct  8 17:33:25 2014	(r370472)
@@ -1,5 +1,5 @@
---- ./lib/uuid/gen_uuid.c.orig	2013-12-16 07:32:00.000000000 +0100
-+++ ./lib/uuid/gen_uuid.c	2014-01-06 23:26:48.000000000 +0100
+--- lib/uuid/gen_uuid.c.orig	2014-07-03 14:33:48 UTC
++++ lib/uuid/gen_uuid.c
 @@ -91,6 +91,7 @@
  #ifdef HAVE_SYS_RESOURCE_H
  #include <sys/resource.h>

Modified: head/sysutils/e2fsprogs/files/patch-misc__Makefile.in
==============================================================================
--- head/sysutils/e2fsprogs/files/patch-misc__Makefile.in	Wed Oct  8 17:24:36 2014	(r370471)
+++ head/sysutils/e2fsprogs/files/patch-misc__Makefile.in	Wed Oct  8 17:33:25 2014	(r370472)
@@ -1,5 +1,5 @@
---- ./misc/Makefile.in.orig	2013-12-26 06:26:22.000000000 +0100
-+++ ./misc/Makefile.in	2014-01-06 23:26:48.000000000 +0100
+--- misc/Makefile.in.orig	2014-08-02 23:41:18 UTC
++++ misc/Makefile.in
 @@ -28,15 +28,15 @@
  
  SPROGS=		mke2fs badblocks tune2fs dumpe2fs $(BLKID_PROG) logsave \
@@ -21,7 +21,7 @@
  
  LPROGS=		@E2INITRD_PROG@
  
-@@ -125,14 +125,14 @@
+@@ -127,14 +127,14 @@
  
  mke2fs.conf: $(srcdir)/mke2fs.conf.in
  	if test -f $(srcdir)/mke2fs.conf.custom.in ; then \
@@ -39,7 +39,7 @@
  		>  default_profile.c
  profile.o:
  	$(E) "	CC $<"
-@@ -498,34 +498,9 @@
+@@ -515,34 +515,9 @@
  		(cd $(DESTDIR)$(man5dir); \
  			$(LN) $(LINK_INSTALL_FLAGS) ext4.5 $$i.5); \
  	done

Modified: head/sysutils/e2fsprogs/files/patch-misc__tune2fs.c
==============================================================================
--- head/sysutils/e2fsprogs/files/patch-misc__tune2fs.c	Wed Oct  8 17:24:36 2014	(r370471)
+++ head/sysutils/e2fsprogs/files/patch-misc__tune2fs.c	Wed Oct  8 17:33:25 2014	(r370472)
@@ -1,5 +1,5 @@
---- ./misc/tune2fs.c.orig	2013-12-29 05:18:02.000000000 +0100
-+++ ./misc/tune2fs.c	2014-01-06 23:43:47.000000000 +0100
+--- misc/tune2fs.c.orig	2014-08-02 20:26:22 UTC
++++ misc/tune2fs.c
 @@ -25,7 +25,6 @@
   * 94/03/06	- Added the checks interval from Uwe Ohse (uwe@tirka.gun.de)
   */

Added: head/sysutils/e2fsprogs/files/patch-zzz-f38676c3e4001359b96576204e9024557ef5fd1b
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sysutils/e2fsprogs/files/patch-zzz-f38676c3e4001359b96576204e9024557ef5fd1b	Wed Oct  8 17:33:25 2014	(r370472)
@@ -0,0 +1,64 @@
+commit f38676c3e4001359b96576204e9024557ef5fd1b
+Author: Theodore Ts'o <tytso@mit.edu>
+Date:   Wed Oct 8 11:47:00 2014 -0400
+
+    e2fsprogs: 1.42.11 regression in memory handling: use-after-free since commit 47fee2e "e2fsprogs: introduce ext2fs_close_free() helper"
+    
+    Hi Matthias,
+    
+    Thanks for reporting this.  I'm not 100% sure this will fix your
+    problem, since your specific valgrind failures aren't reproducing for
+    me.  That being said, I was able to find a valgrind failure, and after
+    looking closely at the commit that you bisected things to, I found a
+    bug which was introduced by commit 47fee2ef6a23a.
+    
+    Could you check and see if this fixes the problems you are seeing?
+    
+    Many thanks!!
+    
+    						- Ted
+    
+    commit ebdf895b43a1ce499e4d2556a201e2a753fc422f
+    Author: Theodore Ts'o <tytso@mit.edu>
+    Date:   Wed Oct 8 11:18:41 2014 -0400
+    
+        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 <mandree@FreeBSD.org>
+        Cc: Lukas Czerner <lczerner@redhat.com>
+        Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+
+diff --git a/e2fsck/unix.c b/e2fsck/unix.c
+index 66debcd..10036e7 100644
+--- ./e2fsck/unix.c
++++ ./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)

Added: head/sysutils/e2fsprogs/files/patch-zzz-f8d3d1661885a07ac9ef639dda0ce23d181a2c73
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sysutils/e2fsprogs/files/patch-zzz-f8d3d1661885a07ac9ef639dda0ce23d181a2c73	Wed Oct  8 17:33:25 2014	(r370472)
@@ -0,0 +1,90 @@
+commit f8d3d1661885a07ac9ef639dda0ce23d181a2c73
+Author: Theodore Ts'o <tytso@mit.edu>
+Date:   Wed Oct 8 12:18:32 2014 -0400
+
+    resize2fs: fix fs->blocksize dereference after fs has been freed]
+    
+    FYI, you'll probably want this patch too, since it's applicable to 1.42.12.
+    
+         	    	     	       	     	  - Ted
+    
+    Commit 77255cf36944b introduced a use after free bug.
+    
+    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+
+diff --git a/resize/main.c b/resize/main.c
+index c107028..983d8c2 100644
+--- ./resize/main.c
++++ ./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)) {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201410081733.s98HXQkf012239>