Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > media > main-src > by-pkgid > 087c07ba1119dc259cb65abc62ef69e9 > files > 30

e2fsprogs-1.39-20.el5.src.rpm

From: Theodore Ts'o <tytso@mit.edu>
Date: Tue, 14 Nov 2006 05:34:34 +0000 (-0500)
Subject: Fix type punning bugs in ext2fs_get_mem() and ext2fs_free_mem()
X-Git-Tag: E2FSPROGS-1_40-WIP-1114~5
X-Git-Url: http://git.kernel.org/?p=fs%2Fext2%2Fe2fsprogs.git;a=commitdiff_plain;h=2694f31946f0c168cc8d098f3970f0ae08d94e7b

Fix type punning bugs in ext2fs_get_mem() and ext2fs_free_mem()

This was causing dumpe2fs to crash on the ARM platform when examining
the badblocks list.

Also reverts an incorrect fix made by changeset 38078f692c20

Addresses Debian Bug: #397044

Also, portion of:

commit de8f3a76218255e443ba57dec5d74850180fa75d
Author: Andreas Dilger <adilger@clusterfs.com>
Date:   Fri May 25 11:18:11 2007 -0400

    Fix gcc -Wall warnings, especially on 64-bit systems

    Signed-off-by: Andreas Dilger <adilger@clusterfs.com>
    Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>


---

Index: e2fsprogs-1.39/lib/ext2fs/ChangeLog
===================================================================
--- e2fsprogs-1.39.orig/lib/ext2fs/ChangeLog	2008-06-19 11:50:13.000000000 -0500
+++ e2fsprogs-1.39/lib/ext2fs/ChangeLog	2008-06-19 11:53:41.183983267 -0500
@@ -17,6 +17,12 @@
 		(ext2fs_write_inode_full): Fix memory leak on error return
 		(when the inode table is missing).
 
+2006-11-14  Theodore Tso  <tytso@mit.edu>
+
+	* ext2fs.h (ext2fs_get_mem, ext2fs_free_mem): Avoid type punning
+		which causes problems on the ARM processor.  (Addresses
+		Debian Bug: #397044)
+
 2006-08-30  Eric Sandeen <esandeen@redhat.com>
 
 	* alloc_tables.c (ext2fs_allocate_group_table):
Index: e2fsprogs-1.39/lib/ext2fs/badblocks.c
===================================================================
--- e2fsprogs-1.39.orig/lib/ext2fs/badblocks.c	2008-06-19 11:50:13.000000000 -0500
+++ e2fsprogs-1.39/lib/ext2fs/badblocks.c	2008-06-19 11:55:02.038046145 -0500
@@ -43,7 +43,7 @@ static errcode_t make_u32_list(int size,
 	bb->size = size ? size : 10;
 	bb->num = num;
 	retval = ext2fs_get_array(bb->size, sizeof(blk_t), &bb->list);
-	if (!bb->list) {
+	if (retval) {
 		ext2fs_free_mem(&bb);
 		return retval;
 	}
Index: e2fsprogs-1.39/lib/ext2fs/ext2fs.h
===================================================================
--- e2fsprogs-1.39.orig/lib/ext2fs/ext2fs.h	2008-06-19 11:50:13.000000000 -0500
+++ e2fsprogs-1.39/lib/ext2fs/ext2fs.h	2008-06-19 11:50:39.195983006 -0500
@@ -998,11 +998,12 @@ extern unsigned int ext2fs_div_ceil(unsi
  */
 _INLINE_ errcode_t ext2fs_get_mem(unsigned long size, void *ptr)
 {
-	void **pp = (void **)ptr;
+	void *pp;
 
-	*pp = malloc(size);
-	if (!*pp)
+	pp = malloc(size);
+	if (!pp)
 		return EXT2_ET_NO_MEMORY;
+	memcpy(ptr, &pp, sizeof (pp));
 	return 0;
 }
 _INLINE_ errcode_t ext2fs_get_array(unsigned long count, unsigned long size, void *ptr)
@@ -1017,10 +1018,12 @@ _INLINE_ errcode_t ext2fs_get_array(unsi
  */
 _INLINE_ errcode_t ext2fs_free_mem(void *ptr)
 {
-	void **pp = (void **)ptr;
+	void *p;
 
-	free(*pp);
-	*pp = 0;
+	memcpy(&p, ptr, sizeof(p));
+	free(p);
+	p = 0;
+	memcpy(ptr, &p, sizeof(p));
 	return 0;
 }
 	
@@ -1034,11 +1037,11 @@ _INLINE_ errcode_t ext2fs_resize_mem(uns
 
 	/* Use "memcpy" for pointer assignments here to avoid problems
 	 * with C99 strict type aliasing rules. */
-	memcpy(&p, ptr, sizeof (p));
+	memcpy(&p, ptr, sizeof(p));
 	p = realloc(p, size);
 	if (!p)
 		return EXT2_ET_NO_MEMORY;
-	memcpy(ptr, &p, sizeof (p));
+	memcpy(ptr, &p, sizeof(p));
 	return 0;
 }
 #endif	/* Custom memory routines */
Index: e2fsprogs-1.39/resize/ChangeLog
===================================================================
--- e2fsprogs-1.39.orig/resize/ChangeLog	2008-09-12 10:43:28.000000000 -0500
+++ e2fsprogs-1.39/resize/ChangeLog	2008-09-12 10:46:01.804077365 -0500
@@ -4,6 +4,10 @@
 		to make sure the superblock changes are written out to the
 		backup superblocks.
 
+2007-05-22  Theodore Tso  <tytso@mit.edu>
+
+	* sim_progress.c (ext2fs_progress_init): Fix type-punning warning.
+
 2007-03-18  Theodore Tso  <tytso@mit.edu>
 
 	* resize2fs.c (check_and_change_inodes): Check to make sure the
diff --git a/resize/sim_progress.c b/resize/sim_progress.c
index 103a727..400e364 100644
--- a/resize/sim_progress.c
+++ b/resize/sim_progress.c
@@ -87,7 +87,7 @@ errcode_t ext2fs_progress_init(ext2_sim_progmeter *ret_prog,
 		return retval;
 	memset(prog, 0, sizeof(struct ext2_sim_progress));

-	retval = ext2fs_get_mem(strlen(label)+1, (void **) &prog->label);
+	retval = ext2fs_get_mem(strlen(label)+1, &prog->label);
 	if (retval) {
 		free(prog);
 		return retval;