* Tue Oct 23 2007 Eric Sandeen <esandeen@redhat.com> 1.40.2-11
- Add arm to multilib header wrapper
This commit is contained in:
		
							parent
							
								
									5ec361ecc1
								
							
						
					
					
						commit
						8718d2dc3a
					
				| @ -19,6 +19,8 @@ | ||||
| #include "blkid_types-x86_64.h" | ||||
| #elif defined(__alpha__) | ||||
| #include "blkid_types-alpha.h" | ||||
| #elif defined(__arm__) | ||||
| #include "blkid_types-arm.h" | ||||
| #else | ||||
| #error "This e2fsprogs-devel package does not work your architecture?" | ||||
| #endif | ||||
|  | ||||
| @ -1,168 +0,0 @@ | ||||
| # HG changeset patch | ||||
| # User tytso@mit.edu | ||||
| # Date Tue Sep 12 14:56:17 2006 -0400 | ||||
| # Node ID 7e1e8751d2be27716166e88453b52273b7096039 | ||||
| # parent: 1aa8aca8acebca38b38ee003c17a045bc5fde185 | ||||
| Add checks to make sure inode counts don't overflow a 32-bit value | ||||
| 
 | ||||
| Signed-off-by: Eric Sandeen <esandeen@redhat.com> | ||||
| 
 | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/e2fsck/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/e2fsck/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/e2fsck/ChangeLog
 | ||||
| @@ -6,6 +6,10 @@
 | ||||
|   | ||||
|  2006-08-30  Eric Sandeen <esandeen@redhat.com> | ||||
|   | ||||
| +	* unix.c (show_stats): use ext2_ino_t for inode containers.
 | ||||
| +
 | ||||
| +2006-08-30  Eric Sandeen <esandeen@redhat.com>
 | ||||
| +
 | ||||
|  	* e2fsck.h (e2fsck): Use unsigned types for filesystem counters. | ||||
|  	* emptydir.c (add_empty_dirblock): | ||||
|  	* iscan.c (main): | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/e2fsck/unix.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/e2fsck/unix.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/e2fsck/unix.c
 | ||||
| @@ -98,7 +98,7 @@ static void usage(e2fsck_t ctx)
 | ||||
|  static void show_stats(e2fsck_t	ctx) | ||||
|  { | ||||
|  	ext2_filsys fs = ctx->fs; | ||||
| -	__u32 inodes, inodes_used;
 | ||||
| +	ext2_ino_t inodes, inodes_used;
 | ||||
|  	blk_t blocks, blocks_used; | ||||
|  	int dir_links; | ||||
|  	int num_files, num_links; | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/ext2fs/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/ChangeLog
 | ||||
| @@ -8,6 +8,11 @@
 | ||||
|   | ||||
|  2006-08-30  Eric Sandeen <esandeen@redhat.com> | ||||
|   | ||||
| +	* initialize.c (ext2fs_initialize): Make sure inode count does
 | ||||
| +		not overflow 32 bits.
 | ||||
| +
 | ||||
| +2006-08-30  Eric Sandeen <esandeen@redhat.com>
 | ||||
| +
 | ||||
|  	* bmove.c (process_block): | ||||
|  	* getsize.c (main): | ||||
|  	* icount.c (ext2fs_create_icount2, insert_icount_el): | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/initialize.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/ext2fs/initialize.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/initialize.c
 | ||||
| @@ -246,9 +246,8 @@ retry:
 | ||||
|  	if (ipg > (unsigned) EXT2_MAX_INODES_PER_GROUP(super)) | ||||
|  		ipg = EXT2_MAX_INODES_PER_GROUP(super); | ||||
|   | ||||
| +ipg_retry:
 | ||||
|  	super->s_inodes_per_group = ipg; | ||||
| -	if (super->s_inodes_count > ipg * fs->group_desc_count)
 | ||||
| -		super->s_inodes_count = ipg * fs->group_desc_count;
 | ||||
|   | ||||
|  	/* | ||||
|  	 * Make sure the number of inodes per group completely fills | ||||
| @@ -276,6 +275,10 @@ retry:
 | ||||
|  	/* | ||||
|  	 * adjust inode count to reflect the adjusted inodes_per_group | ||||
|  	 */ | ||||
| +	if ((__u64)super->s_inodes_per_group * fs->group_desc_count > ~0U) {
 | ||||
| +		ipg--;
 | ||||
| +		goto ipg_retry;
 | ||||
| +	}
 | ||||
|  	super->s_inodes_count = super->s_inodes_per_group * | ||||
|  		fs->group_desc_count; | ||||
|  	super->s_free_inodes_count = super->s_inodes_count; | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/misc/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/misc/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/misc/ChangeLog
 | ||||
| @@ -5,6 +5,10 @@
 | ||||
|   | ||||
|  2006-08-30  Eric Sandeen <esandeen@redhat.com> | ||||
|   | ||||
| +	* mke2fs.c (PRS): Disallow > 2^32 inodes at mkfs time.
 | ||||
| +
 | ||||
| +2006-08-30  Eric Sandeen <esandeen@redhat.com>
 | ||||
| +
 | ||||
|  	* dumpe2fs.c (list_bad_blocks): | ||||
|  	* e2image.c (output_meta_data_blocks, write_raw_image_file): | ||||
|  	* mke2fs.c (test_disk, handle_bad_blocks): Fix printf formats. | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/misc/mke2fs.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/misc/mke2fs.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/misc/mke2fs.c
 | ||||
| @@ -895,7 +895,7 @@ static void PRS(int argc, char *argv[])
 | ||||
|  	double		reserved_ratio = 5.0; | ||||
|  	int		sector_size = 0; | ||||
|  	int		show_version_only = 0; | ||||
| -	ext2_ino_t	num_inodes = 0;
 | ||||
| +	__u64		num_inodes = 0;	/* u64 to catch too-large input */
 | ||||
|  	errcode_t	retval; | ||||
|  	char *		oldpath = getenv("PATH"); | ||||
|  	char *		extended_opts = 0; | ||||
| @@ -1430,6 +1430,21 @@ static void PRS(int argc, char *argv[])
 | ||||
|  		fs_param.s_inode_size = inode_size; | ||||
|  	} | ||||
|   | ||||
| +	/* Make sure number of inodes specified will fit in 32 bits */
 | ||||
| +	if (num_inodes == 0) {
 | ||||
| +		__u64 n;
 | ||||
| +		n = (__u64) fs_param.s_blocks_count * blocksize / inode_ratio;
 | ||||
| +		if (n > ~0U) {
 | ||||
| +			com_err(program_name, 0,
 | ||||
| +			    _("too many inodes (%llu), raise inode ratio?"), n);
 | ||||
| +			exit(1);
 | ||||
| +		}
 | ||||
| +	} else if (num_inodes > ~0U) {
 | ||||
| +		com_err(program_name, 0,
 | ||||
| +			_("too many inodes (%llu), specify < 2^32 inodes"),
 | ||||
| +			  (__u64)num_inodes);
 | ||||
| +		exit(1);
 | ||||
| +	}
 | ||||
|  	/* | ||||
|  	 * Calculate number of inodes based on the inode ratio | ||||
|  	 */ | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/resize/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/resize/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/resize/ChangeLog
 | ||||
| @@ -1,5 +1,9 @@
 | ||||
|  2006-08-30  Eric Sandeen  <esandeen@redhat.com> | ||||
|   | ||||
| +	* resize2fs.c (adjust_fs_info): Disallow > 2^32 indoes at resize time.
 | ||||
| +
 | ||||
| +2006-08-30  Eric Sandeen  <esandeen@redhat.com>
 | ||||
| +
 | ||||
|  	* online.c (online_resize_fs): Fix printf formats. | ||||
|   | ||||
|  2006-08-30  Eric Sandeen  <esandeen@redhat.com> | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/resize/resize2fs.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/resize/resize2fs.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/resize/resize2fs.c
 | ||||
| @@ -186,6 +186,7 @@ errcode_t adjust_fs_info(ext2_filsys fs,
 | ||||
|  	unsigned long	i, j, old_desc_blocks, max_group; | ||||
|  	unsigned int	meta_bg, meta_bg_size; | ||||
|  	int		has_super; | ||||
| +	__u64		new_inodes;	/* u64 to check for overflow */
 | ||||
|   | ||||
|  	fs->super->s_blocks_count = new_size; | ||||
|   | ||||
| @@ -226,6 +227,12 @@ retry:
 | ||||
|  	/* | ||||
|  	 * Adjust the number of inodes | ||||
|  	 */ | ||||
| +	new_inodes =(__u64)fs->super->s_inodes_per_group * fs->group_desc_count;
 | ||||
| +	if (new_inodes > ~0U) {
 | ||||
| +		fprintf(stderr, _("inodes (%llu) must be less than %u"),
 | ||||
| +				   new_inodes, ~0U);
 | ||||
| +		return EXT2_ET_TOO_MANY_INODES;
 | ||||
| +	}
 | ||||
|  	fs->super->s_inodes_count = fs->super->s_inodes_per_group * | ||||
|  		fs->group_desc_count; | ||||
|   | ||||
| @ -1,87 +0,0 @@ | ||||
| Theodore Tso schrieb: | ||||
| > > On Mon, Jun 11, 2007 at 01:51:24PM +0200, Karsten Hopp wrote:
 | ||||
| >> >> +static int probe_luks(struct blkid_probe *probe, | ||||
| >> >> +		       struct blkid_magic *id __BLKID_ATTR((unused)),  | ||||
| >> >> +		       unsigned char *buf) | ||||
| >> >> +{ | ||||
| >> >> +	unsigned char *p_buf = buf; | ||||
| >> >> +	unsigned char uuid[40]; | ||||
| >> >> +	/* 168 is the offset to the 40 character uuid:  | ||||
| >> >> +	 * http://luks.endorphin.org/LUKS-on-disk-format.pdf */ | ||||
| >> >> +	p_buf += 168; | ||||
| >> >> +	strncpy(uuid, p_buf, 40); | ||||
| > > 
 | ||||
| > > Why bother with p_buf?  It would actually be shorter and sweeter to
 | ||||
| > > do:
 | ||||
| > > 
 | ||||
| > > 	strncpy(uuid, buf+168, 40);
 | ||||
| > > 
 | ||||
| > > And remove the lines dealing with p_buf above.
 | ||||
| > > 
 | ||||
| >> >> +  { "crypt_LUKS",0,	 0,  6,	"LUKS\xba\xbe",		probe_luks }, | ||||
| > > 
 | ||||
| > > Any particular reason to use "crypt_LUKS" instead of just "LUKS"?  In
 | ||||
| > > your documentation you generally just refer to it as LUKS.
 | ||||
| > > 
 | ||||
| > > 					- Ted
 | ||||
| 
 | ||||
| I've used 'luks' in my first patch, but changed it to 'crypt_LUKS' when | ||||
| Karel Zak pointed out that libvolume_id from udev already uses 'crypt_LUKS' | ||||
| for this. | ||||
| My first patch also did some other (unnecessary) stuff with p_buf and I just | ||||
| didn't bother to remove it. | ||||
| I'll attach a new patch without p_buf. | ||||
| 
 | ||||
|     Karsten | ||||
| 
 | ||||
| --
 | ||||
|   Karsten Hopp        | Mail: karsten@redhat.de | ||||
|   Red Hat Deutschland | Tel: +49-711-96437-0 | ||||
|   Hauptstaetterstr.58 | Fax: +49-711-613590 | ||||
|   D-70178 Stuttgart   | http://www.redhat.de | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| e2fsprogs-1.39-luks.patch | ||||
| Problem:        libblkid doesn't detect/report UUIDs of cryptsetup-luks partitio | ||||
| ns | ||||
| Solution:       Add probe for luks UUID | ||||
| Signed-off-by:  Karsten Hopp <karsten@redhat.com> | ||||
| 
 | ||||
| --- e2fsprogs-1.39/lib/blkid/ChangeLog.luksuuid	2007-06-11 13:40:14.000000000 +0200
 | ||||
| +++ e2fsprogs-1.39/lib/blkid/ChangeLog	2007-06-11 13:40:14.000000000 +0200
 | ||||
| @@ -0,0 +1,4 @@
 | ||||
| +2007-05-22  Karsten Hopp  <karsten@redhat.com> 
 | ||||
| +
 | ||||
| +	* probe.c (probe_luks): Add support for cryptsetup-luks partitions
 | ||||
| +
 | ||||
| --- e2fsprogs-1.39/lib/blkid/probe.c.luksuuid	2007-06-11 13:40:14.000000000 +0200
 | ||||
| +++ e2fsprogs-1.39/lib/blkid/probe.c	2007-06-13 12:50:27.000000000 +0200
 | ||||
| @@ -468,6 +468,18 @@ static int probe_jfs(struct blkid_probe 
 | ||||
|  	return 0; | ||||
|  } | ||||
|   | ||||
| +static int probe_luks(struct blkid_probe *probe,
 | ||||
| +		       struct blkid_magic *id __BLKID_ATTR((unused)), 
 | ||||
| +		       unsigned char *buf)
 | ||||
| +{
 | ||||
| +	unsigned char uuid[40];
 | ||||
| +	/* 168 is the offset to the 40 character uuid: 
 | ||||
| +	 * http://luks.endorphin.org/LUKS-on-disk-format.pdf */
 | ||||
| +	strncpy(uuid, buf+168, 40);
 | ||||
| +	blkid_set_tag(probe->dev, "UUID", uuid, sizeof(uuid));
 | ||||
| +	return 0;
 | ||||
| +}
 | ||||
| +
 | ||||
|  static int probe_romfs(struct blkid_probe *probe, | ||||
|  		       struct blkid_magic *id __BLKID_ATTR((unused)),  | ||||
|  		       unsigned char *buf) | ||||
| @@ -775,6 +787,7 @@ static struct blkid_magic type_array[] =
 | ||||
|    { "ocfs2",	 2,	 0,  6,	"OCFSV2",		probe_ocfs2 }, | ||||
|    { "ocfs2",	 4,	 0,  6,	"OCFSV2",		probe_ocfs2 }, | ||||
|    { "ocfs2",	 8,	 0,  6,	"OCFSV2",		probe_ocfs2 }, | ||||
| +  { "crypt_LUKS",0,	 0,  6,	"LUKS\xba\xbe",		probe_luks },
 | ||||
|    {   NULL,	 0,	 0,  0, NULL,			NULL } | ||||
|  }; | ||||
|   | ||||
| 
 | ||||
| @ -1,11 +0,0 @@ | ||||
| --- e2fsprogs-1.39/lib/blkid/devname.c.foo	2006-07-20 16:48:07.000000000 -0400
 | ||||
| +++ e2fsprogs-1.39/lib/blkid/devname.c	2006-07-20 16:48:18.000000000 -0400
 | ||||
| @@ -291,7 +291,7 @@
 | ||||
|   | ||||
|  		names = (void *)names + next; | ||||
|   | ||||
| -		rc = asprintf(&device, "/dev/mapper/%s", names->name);
 | ||||
| +		rc = asprintf(&device, "mapper/%s", names->name);
 | ||||
|  		if (rc < 0) | ||||
|  			goto try_next; | ||||
|   | ||||
| @ -1,20 +0,0 @@ | ||||
| --- e2fsprogs-1.39/lib/blkid/probe.c.fatlabel	2006-09-17 15:45:54.000000000 +0200
 | ||||
| +++ e2fsprogs-1.39/lib/blkid/probe.c	2006-09-17 15:46:32.000000000 +0200
 | ||||
| @@ -348,8 +348,8 @@
 | ||||
|  	} | ||||
|   | ||||
|  	if (vol_label && memcmp(vol_label, no_name, 11)) { | ||||
| -		label = vol_label;
 | ||||
| -		label_len = figure_label_len(vol_label, 11);
 | ||||
| +		if ((label_len = figure_label_len(vol_label, 11)))
 | ||||
| +			label = vol_label;
 | ||||
|  	} | ||||
|   | ||||
|  	/* We can't just print them as %04X, because they are unaligned */ | ||||
| --- e2fsprogs-1.39/lib/blkid/ChangeLog.fatlabel	2006-09-17 15:51:05.000000000 +0200
 | ||||
| +++ e2fsprogs-1.39/lib/blkid/ChangeLog	2006-09-17 15:52:37.000000000 +0200
 | ||||
| @@ -0,0 +1,4 @@
 | ||||
| +2006-09-17  Karel Zak  <kzak@redhat.com> 
 | ||||
| +
 | ||||
| +	* probe.c (probe_fat): Fix problem with empty FAT label.
 | ||||
| +
 | ||||
| @ -1,126 +0,0 @@ | ||||
| --- e2fsprogs-1.39/lib/blkid/probe.c.gfs	2006-05-14 23:24:09.000000000 +0200
 | ||||
| +++ e2fsprogs-1.39/lib/blkid/probe.c	2006-07-10 08:15:11.000000000 +0200
 | ||||
| @@ -646,6 +646,50 @@
 | ||||
|  	return 0; | ||||
|  } | ||||
|   | ||||
| +static int probe_gfs(struct blkid_probe *probe,
 | ||||
| +		     struct blkid_magic *id __BLKID_ATTR((unused)),
 | ||||
| +		     unsigned char *buf)
 | ||||
| +{
 | ||||
| +	struct gfs2_sb *sbd;
 | ||||
| +	const char *label = 0;
 | ||||
| +
 | ||||
| +	sbd = (struct gfs2_sb *)buf;
 | ||||
| +
 | ||||
| +	if (blkid_be32(sbd->sb_fs_format) == GFS_FORMAT_FS &&
 | ||||
| +	    blkid_be32(sbd->sb_multihost_format) == GFS_FORMAT_MULTI)
 | ||||
| +	{	
 | ||||
| +		blkid_set_tag(probe->dev, "UUID", 0, 0);
 | ||||
| +	
 | ||||
| +		if (strlen(sbd->sb_locktable))
 | ||||
| +			label = sbd->sb_locktable;
 | ||||
| +		blkid_set_tag(probe->dev, "LABEL", label, sizeof(sbd->sb_locktable));
 | ||||
| +		return 0;
 | ||||
| +	}
 | ||||
| +	return 1;
 | ||||
| +}
 | ||||
| +
 | ||||
| +static int probe_gfs2(struct blkid_probe *probe,
 | ||||
| +		     struct blkid_magic *id __BLKID_ATTR((unused)),
 | ||||
| +		     unsigned char *buf)
 | ||||
| +{
 | ||||
| +	struct gfs2_sb *sbd;
 | ||||
| +	const char *label = 0;
 | ||||
| +
 | ||||
| +	sbd = (struct gfs2_sb *)buf;
 | ||||
| +
 | ||||
| +	if (blkid_be32(sbd->sb_fs_format) == GFS2_FORMAT_FS &&
 | ||||
| +	    blkid_be32(sbd->sb_multihost_format) == GFS2_FORMAT_MULTI)
 | ||||
| +	{	
 | ||||
| +		blkid_set_tag(probe->dev, "UUID", 0, 0);
 | ||||
| +	
 | ||||
| +		if (strlen(sbd->sb_locktable))
 | ||||
| +			label = sbd->sb_locktable;
 | ||||
| +		blkid_set_tag(probe->dev, "LABEL", label, sizeof(sbd->sb_locktable));
 | ||||
| +		return 0;
 | ||||
| +	}
 | ||||
| +	return 1;
 | ||||
| +}
 | ||||
| +
 | ||||
|  /* | ||||
|   * BLKID_BLK_OFFS is at least as large as the highest bim_kboff defined | ||||
|   * in the type_array table below + bim_kbalign. | ||||
| @@ -673,6 +717,8 @@
 | ||||
|    { "reiserfs", 64,   0x34,  8, "ReIsErFs",		probe_reiserfs }, | ||||
|    { "reiserfs",	 8,	20,  8, "ReIsErFs",		probe_reiserfs }, | ||||
|    { "reiser4",  64,	 0,  7, "ReIsEr4",		probe_reiserfs4 }, | ||||
| +  { "gfs2",     64,      0,  4, "\x01\x16\x19\x70",     probe_gfs2 },
 | ||||
| +  { "gfs",      64,      0,  4, "\x01\x16\x19\x70",     probe_gfs },
 | ||||
|    { "vfat",      0,   0x52,  5, "MSWIN",                probe_fat }, | ||||
|    { "vfat",      0,   0x52,  8, "FAT32   ",             probe_fat }, | ||||
|    { "vfat",      0,   0x36,  5, "MSDOS",                probe_fat }, | ||||
| --- e2fsprogs-1.39/lib/blkid/probe.h.gfs	2006-03-10 21:43:35.000000000 +0100
 | ||||
| +++ e2fsprogs-1.39/lib/blkid/probe.h	2006-07-07 13:45:43.000000000 +0200
 | ||||
| @@ -345,6 +345,54 @@
 | ||||
|  	unsigned char	escape_sequences[8]; | ||||
|  }; | ||||
|   | ||||
| +/* Common gfs/gfs2 constants: */
 | ||||
| +#define GFS_MAGIC               0x01161970
 | ||||
| +#define GFS_DEFAULT_BSIZE       4096
 | ||||
| +#define GFS_SUPERBLOCK_OFFSET	(0x10 * GFS_DEFAULT_BSIZE)
 | ||||
| +#define GFS_METATYPE_SB         1
 | ||||
| +#define GFS_FORMAT_SB           100
 | ||||
| +#define GFS_LOCKNAME_LEN        64
 | ||||
| +
 | ||||
| +/* gfs1 constants: */
 | ||||
| +#define GFS_FORMAT_FS           1309
 | ||||
| +#define GFS_FORMAT_MULTI        1401
 | ||||
| +/* gfs2 constants: */
 | ||||
| +#define GFS2_FORMAT_FS          1801
 | ||||
| +#define GFS2_FORMAT_MULTI       1900
 | ||||
| +
 | ||||
| +struct gfs2_meta_header {
 | ||||
| +	__u32 mh_magic;
 | ||||
| +	__u32 mh_type;
 | ||||
| +	__u64 __pad0;          /* Was generation number in gfs1 */
 | ||||
| +	__u32 mh_format;
 | ||||
| +	__u32 __pad1;          /* Was incarnation number in gfs1 */
 | ||||
| +};
 | ||||
| +
 | ||||
| +struct gfs2_inum {
 | ||||
| +	__u64 no_formal_ino;
 | ||||
| +	__u64 no_addr;
 | ||||
| +};
 | ||||
| +
 | ||||
| +struct gfs2_sb {
 | ||||
| +	struct gfs2_meta_header sb_header;
 | ||||
| +
 | ||||
| +	__u32 sb_fs_format;
 | ||||
| +	__u32 sb_multihost_format;
 | ||||
| +	__u32  __pad0;  /* Was superblock flags in gfs1 */
 | ||||
| +	
 | ||||
| +	__u32 sb_bsize;
 | ||||
| +	__u32 sb_bsize_shift;
 | ||||
| +	__u32 __pad1;   /* Was journal segment size in gfs1 */
 | ||||
| +	
 | ||||
| +	struct gfs2_inum sb_master_dir; /* Was jindex dinode in gfs1 */
 | ||||
| +	struct gfs2_inum __pad2; /* Was rindex dinode in gfs1 */
 | ||||
| +	struct gfs2_inum sb_root_dir;
 | ||||
| +	
 | ||||
| +	char sb_lockproto[GFS_LOCKNAME_LEN];
 | ||||
| +	char sb_locktable[GFS_LOCKNAME_LEN];
 | ||||
| +	/* In gfs1, quota and license dinodes followed */
 | ||||
| +} PACKED;
 | ||||
| +
 | ||||
|  /* | ||||
|   * Byte swap functions | ||||
|   */ | ||||
| --- e2fsprogs-1.39/lib/blkid/ChangeLog.gfs	2006-05-14 23:25:12.000000000 +0200
 | ||||
| +++ e2fsprogs-1.39/lib/blkid/ChangeLog	2006-07-10 08:16:22.000000000 +0200
 | ||||
| @@ -0,0 +1,4 @@
 | ||||
| +2006-07-10  Karel Zak  <kzak@redhat.com>
 | ||||
| +
 | ||||
| +	* probe.c (probe_gfs, _gfs2), probe.h: Add support for GFS/GFS2 
 | ||||
| +
 | ||||
| @ -1,28 +0,0 @@ | ||||
| --- e2fsprogs-1.39/lib/ext2fs/getsize.c.close-on-error	2005-09-06 11:40:14.000000000 +0200
 | ||||
| +++ e2fsprogs-1.39/lib/ext2fs/getsize.c	2006-06-22 14:46:27.000000000 +0200
 | ||||
| @@ -169,8 +169,10 @@
 | ||||
|  #ifdef DKIOCGETBLOCKCOUNT	/* For Apple Darwin */ | ||||
|  	if (ioctl(fd, DKIOCGETBLOCKCOUNT, &size64) >= 0) { | ||||
|  		if ((sizeof(*retblocks) < sizeof(unsigned long long)) | ||||
| -		    && ((size64 / (blocksize / 512)) > 0xFFFFFFFF))
 | ||||
| -			return EFBIG;
 | ||||
| +		    && ((size64 / (blocksize / 512)) > 0xFFFFFFFF)) {
 | ||||
| +			rc = EFBIG;
 | ||||
| +			goto out;
 | ||||
| +		}
 | ||||
|  		*retblocks = size64 / (blocksize / 512); | ||||
|  		goto out; | ||||
|  	} | ||||
| @@ -275,8 +277,10 @@
 | ||||
|  	valid_offset (fd, 0); | ||||
|  	size64 = low + 1; | ||||
|  	if ((sizeof(*retblocks) < sizeof(unsigned long long)) | ||||
| -	    && ((size64 / blocksize) > 0xFFFFFFFF))
 | ||||
| -		return EFBIG;
 | ||||
| +	    && ((size64 / blocksize) > 0xFFFFFFFF)) {
 | ||||
| +		rc = EFBIG;
 | ||||
| +		goto out;
 | ||||
| +	}
 | ||||
|  	*retblocks = size64 / blocksize; | ||||
|  out: | ||||
|  	close(fd); | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -1,51 +0,0 @@ | ||||
| # HG changeset patch | ||||
| # User tytso@mit.edu | ||||
| # Date 1170006028 18000 | ||||
| # Node ID 1619c81226d196f7e943e96b1ecc80c477dc7806 | ||||
| # Parent 61145b06a34c8a476827e02fd0a8c7c95a2ad912 | ||||
| Fix dump_usued segault in debugfs if used without open filesystem | ||||
| 
 | ||||
| The dump_unused command in debugfs segfaults if used without an open | ||||
| filesystem: | ||||
| 
 | ||||
| sor:~ # debugfs | ||||
| debugfs 1.39 (29-May-2006) | ||||
| debugfs:  dump_unused | ||||
| Segmentation fault | ||||
| 
 | ||||
| Patch (from IBM) below. | ||||
| 
 | ||||
| Signed-off-by: Matthias Koenig <mkoenig@suse.de> | ||||
| 
 | ||||
| 
 | ||||
| Index: e2fsprogs-1.39-RHEL5/debugfs/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-RHEL5.orig/debugfs/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-RHEL5/debugfs/ChangeLog
 | ||||
| @@ -24,6 +24,11 @@
 | ||||
|  		to avoid the possibility of an array overrun if the | ||||
|  		filename is exactly EXT2_NAME_LEN in size. | ||||
|   | ||||
| +2007-01-28  Theodore Tso  <tytso@mit.edu>
 | ||||
| +
 | ||||
| +	* unused.c: Fix bug so that the dump_unused command segfault if
 | ||||
| +		used without an open filesystem
 | ||||
| +
 | ||||
|  2006-08-30  Eric Sandeen <esandeen@redhat.com> | ||||
|   | ||||
|  	* htree.c (htree_dump_int_node): Fix printf formats. | ||||
| Index: e2fsprogs-1.39-RHEL5/debugfs/unused.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-RHEL5.orig/debugfs/unused.c
 | ||||
| +++ e2fsprogs-1.39-RHEL5/debugfs/unused.c
 | ||||
| @@ -31,6 +31,10 @@ void do_dump_unused(int argc EXT2FS_ATTR
 | ||||
|  	unsigned int	i; | ||||
|  	errcode_t	retval; | ||||
|   | ||||
| +	if (common_args_process(argc, argv, 1, 1,
 | ||||
| +				"dump_unused", "", 0))
 | ||||
| +		return;
 | ||||
| +
 | ||||
|  	for (blk=current_fs->super->s_first_data_block; | ||||
|  	     blk < current_fs->super->s_blocks_count; blk++) { | ||||
|  		if (ext2fs_test_block_bitmap(current_fs->block_map,blk)) | ||||
| @ -1,216 +0,0 @@ | ||||
| # HG changeset patch | ||||
| # User tytso@mit.edu | ||||
| # Date Wed Aug 30 03:08:13 2006 -0400 | ||||
| # Node ID 4a2b0d6c55fc3bea9e5bed4faa82845676f3be2b | ||||
| # parent: 14e45223b10be14cc318f10b804a3fd535a86ad5 | ||||
| Fix potential 2**32-1 overflow by using e2p_percent() | ||||
| 
 | ||||
| Add a new functiom, e2p_percent(), which correct calculates the percentage | ||||
| of a number based on a given percentage, without worrying about overflow | ||||
| issues.  This is used where we calculate the number of reserved blocks using | ||||
| a percentage of the total number of blocks in a filesystem. | ||||
| 
 | ||||
| Based on patches from Eric Sandeen, but generalized to use this new function. | ||||
| 
 | ||||
| Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> | ||||
| Signed-off-by: Eric Sandeen <esandeen@redhat.com> | ||||
| 
 | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/e2p/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/e2p/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/e2p/ChangeLog
 | ||||
| @@ -1,3 +1,9 @@
 | ||||
| +2006-08-30  Theodore Tso  <tytso@mit.edu>
 | ||||
| +
 | ||||
| +	* percent.c (e2p_percent): Add a new function which accurate and
 | ||||
| +		without risk of overflow calculates a percentage of a base
 | ||||
| +		number.
 | ||||
| +
 | ||||
|  2006-05-08  Theodore Tso  <tytso@mit.edu> | ||||
|   | ||||
|  	* feature.c: Add support for EXT2_FEATURE_COMPAT_LAZY_BG feature. | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/e2p/Makefile.in
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/e2p/Makefile.in
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/e2p/Makefile.in
 | ||||
| @@ -19,7 +19,7 @@ all::	e2p.pc
 | ||||
|  OBJS=		feature.o fgetflags.o fsetflags.o fgetversion.o fsetversion.o \ | ||||
|  		getflags.o getversion.o hashstr.o iod.o ls.o mntopts.o \ | ||||
|  		parse_num.o pe.o pf.o ps.o setflags.o setversion.o uuid.o \ | ||||
| -		ostype.o 
 | ||||
| +		ostype.o percent.o
 | ||||
|   | ||||
|  SRCS=		$(srcdir)/feature.c $(srcdir)/fgetflags.c \ | ||||
|  		$(srcdir)/fsetflags.c $(srcdir)/fgetversion.c \ | ||||
| @@ -28,7 +28,7 @@ SRCS=		$(srcdir)/feature.c $(srcdir)/fge
 | ||||
|  		$(srcdir)/ls.c $(srcdir)/mntopts.c $(srcdir)/parse_num.c \ | ||||
|  		$(srcdir)/pe.c $(srcdir)/pf.c $(srcdir)/ps.c \ | ||||
|  		$(srcdir)/setflags.c $(srcdir)/setversion.c $(srcdir)/uuid.c \ | ||||
| -		$(srcdir)/ostype.c
 | ||||
| +		$(srcdir)/ostype.c $(srcdir)/percent.o
 | ||||
|  HFILES= e2p.h | ||||
|   | ||||
|  LIBRARY= libe2p | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/e2p/e2p.h
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/e2p/e2p.h
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/e2p/e2p.h
 | ||||
| @@ -50,3 +50,5 @@ unsigned long parse_num_blocks(const cha
 | ||||
|   | ||||
|  char *e2p_os2string(int os_type); | ||||
|  int e2p_string2os(char *str); | ||||
| +
 | ||||
| +unsigned int e2p_percent(int percent, unsigned int base);
 | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/misc/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/misc/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/misc/ChangeLog
 | ||||
| @@ -1,5 +1,9 @@
 | ||||
|  2006-08-30  Theodore Tso  <tytso@mit.edu> | ||||
|   | ||||
| +	* tune2fs.c (main), mke2fs.c (PRS): Use e2p_percent to properly
 | ||||
| +		calculate the number of reserved blocks without worrying
 | ||||
| +		about overflow.
 | ||||
| +
 | ||||
|  	* mke2fs.c (parse_extended_opts): Use ext2fs_div_ceil() instead of | ||||
|  		a using an open-coded expression which was subject to | ||||
|  		overflows. | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/misc/mke2fs.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/misc/mke2fs.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/misc/mke2fs.c
 | ||||
| @@ -1440,8 +1440,8 @@ static void PRS(int argc, char *argv[])
 | ||||
|  	/* | ||||
|  	 * Calculate number of blocks to reserve | ||||
|  	 */ | ||||
| -	fs_param.s_r_blocks_count = (fs_param.s_blocks_count * reserved_ratio)
 | ||||
| -		/ 100;
 | ||||
| +	fs_param.s_r_blocks_count = e2p_percent(reserved_ratio, 
 | ||||
| +						fs_param.s_blocks_count);
 | ||||
|  } | ||||
|   | ||||
|  int main (int argc, char *argv[]) | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/misc/tune2fs.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/misc/tune2fs.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/misc/tune2fs.c
 | ||||
| @@ -823,7 +823,8 @@ int main (int argc, char ** argv)
 | ||||
|  		printf (_("Setting interval between checks to %lu seconds\n"), interval); | ||||
|  	} | ||||
|  	if (m_flag) { | ||||
| -		sb->s_r_blocks_count = sb->s_blocks_count * reserved_ratio /100;
 | ||||
| +		sb->s_r_blocks_count = e2p_percent(reserved_ratio,
 | ||||
| +						   sb->s_blocks_count);
 | ||||
|  		ext2fs_mark_super_dirty(fs); | ||||
|  		printf (_("Setting reserved blocks percentage to %g%% (%u blocks)\n"), | ||||
|  			reserved_ratio, sb->s_r_blocks_count); | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/resize/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/resize/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/resize/ChangeLog
 | ||||
| @@ -1,5 +1,9 @@
 | ||||
|  2006-08-30  Theodore Tso  <tytso@mit.edu> | ||||
|   | ||||
| +	* resize2fs.c (adjust_fs_info), online.c (online_resize_fs): Use
 | ||||
| +		e2p_percent to properly calculate the number of reserved
 | ||||
| +		blocks without worrying about overflow.
 | ||||
| +
 | ||||
|  	* resize2fs.c (ext2fs_calculate_summary_stats): Fix potential | ||||
|  		overflow problems when the number of blocks is close to | ||||
|  		2**31. | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/resize/online.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/resize/online.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/resize/online.c
 | ||||
| @@ -107,7 +107,8 @@ errcode_t online_resize_fs(ext2_filsys f
 | ||||
|  				sb->s_first_data_block -  | ||||
|  				(i * sb->s_blocks_per_group); | ||||
|  		} | ||||
| -		input.reserved_blocks = input.blocks_count * r_frac / 100;
 | ||||
| +		input.reserved_blocks = e2p_percent(r_frac, 
 | ||||
| +						    input.blocks_count);
 | ||||
|   | ||||
|  #if 0 | ||||
|  		printf("new block bitmap is at 0x%04x\n", input.block_bitmap); | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/resize/resize2fs.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/resize/resize2fs.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/resize/resize2fs.c
 | ||||
| @@ -245,8 +245,8 @@ retry:
 | ||||
|  	 */ | ||||
|  	blk = old_fs->super->s_r_blocks_count * 100 / | ||||
|  		old_fs->super->s_blocks_count; | ||||
| -	fs->super->s_r_blocks_count = ((fs->super->s_blocks_count * blk)
 | ||||
| -				       / 100);
 | ||||
| +	fs->super->s_r_blocks_count = e2p_percent(blk, 
 | ||||
| +						  fs->super->s_blocks_count);
 | ||||
|   | ||||
|  	/* | ||||
|  	 * Adjust the bitmaps for size | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/e2p/percent.c
 | ||||
| ===================================================================
 | ||||
| --- /dev/null
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/e2p/percent.c
 | ||||
| @@ -0,0 +1,62 @@
 | ||||
| +/*
 | ||||
| + * percent.c		- Take percentage of a number
 | ||||
| + *
 | ||||
| + * Copyright (C) 2006  Theodore Ts'o <tytso@mit.edu>
 | ||||
| + * 
 | ||||
| + * This file can be redistributed under the terms of the GNU Library General
 | ||||
| + * Public License
 | ||||
| + */
 | ||||
| +
 | ||||
| +#include "e2p.h"
 | ||||
| +
 | ||||
| +#include <stdlib.h>
 | ||||
| +
 | ||||
| +/*
 | ||||
| + * We work really hard to calculate this accurately, while avoiding
 | ||||
| + * an overflow.  "Is there a hyphen in anal-retentive?"  :-)
 | ||||
| + */
 | ||||
| +unsigned int e2p_percent(int percent, unsigned int base)
 | ||||
| +{
 | ||||
| +	unsigned int mask = ~((1 << (sizeof(unsigned int) - 1) * 8) - 1);
 | ||||
| +
 | ||||
| +	if (100 % percent == 0)
 | ||||
| +		return base / (100 / percent);
 | ||||
| +	if (mask & base) 
 | ||||
| +		return (base / 100) * percent;
 | ||||
| +	return base * percent / 100;
 | ||||
| +}
 | ||||
| +
 | ||||
| +#ifdef DEBUG
 | ||||
| +#include <unistd.h>
 | ||||
| +#include <stdio.h>
 | ||||
| +
 | ||||
| +main(int argc, char **argv)
 | ||||
| +{
 | ||||
| +	unsigned int base;
 | ||||
| +	int percent;
 | ||||
| +	char *p;
 | ||||
| +	int log_block_size = 0;
 | ||||
| +
 | ||||
| +	if (argc != 3) {
 | ||||
| +		fprintf(stderr, "Usage: %s percent base\n", argv[0]);
 | ||||
| +		exit(1);
 | ||||
| +	}
 | ||||
| +
 | ||||
| +	percent = strtoul(argv[1], &p, 0);
 | ||||
| +	if (p[0] && p[1]) {
 | ||||
| +		fprintf(stderr, "Bad percent: %s\n", argv[1]);
 | ||||
| +		exit(1);
 | ||||
| +	}
 | ||||
| +	
 | ||||
| +	base = strtoul(argv[2], &p, 0);
 | ||||
| +	if (p[0] && p[1]) {
 | ||||
| +		fprintf(stderr, "Bad base: %s\n", argv[2]);
 | ||||
| +		exit(1);
 | ||||
| +	}
 | ||||
| +
 | ||||
| +	printf("%d percent of %u is %u.\n", percent, base,
 | ||||
| +	       e2p_percent(percent, base));
 | ||||
| +
 | ||||
| +	exit(0);
 | ||||
| +}
 | ||||
| +#endif
 | ||||
| @ -1,132 +0,0 @@ | ||||
| Return-Path: <linux-ext4-owner@vger.kernel.org> | ||||
| Received: from pobox-2.corp.redhat.com ([unix socket]) | ||||
| 	 by pobox-2.corp.redhat.com (Cyrus v2.2.12-Invoca-RPM-2.2.12-3.RHEL4.1) with LMTPA; | ||||
| 	 Wed, 20 Sep 2006 05:01:05 -0400 | ||||
| X-Sieve: CMU Sieve 2.2 | ||||
| Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) | ||||
| 	by pobox-2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id k8K915WI028994 | ||||
| 	for <esandeen@pobox-2.corp.redhat.com>; Wed, 20 Sep 2006 05:01:05 -0400 | ||||
| Received: from mx3.redhat.com (mx3.redhat.com [172.16.48.32]) | ||||
| 	by int-mx1.corp.redhat.com (8.12.11.20060308/8.12.11) with ESMTP id k8K913p5009001; | ||||
| 	Wed, 20 Sep 2006 05:01:03 -0400 | ||||
| Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) | ||||
| 	by mx3.redhat.com (8.13.1/8.13.1) with ESMTP id k8K8q7e4029305; | ||||
| 	Wed, 20 Sep 2006 05:00:57 -0400 | ||||
| Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand | ||||
| 	id S1750745AbWITI4c (ORCPT <rfc822;twoerner@redhat.com> + 3 others); | ||||
| 	Wed, 20 Sep 2006 04:56:32 -0400 | ||||
| Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1750747AbWITI4c | ||||
| 	(ORCPT <rfc822;linux-ext4-outgoing>); | ||||
| 	Wed, 20 Sep 2006 04:56:32 -0400 | ||||
| Received: from ecfrec.frec.bull.fr ([129.183.4.8]:62635 "EHLO | ||||
| 	ecfrec.frec.bull.fr") by vger.kernel.org with ESMTP | ||||
| 	id S1750745AbWITI4a (ORCPT <rfc822;linux-ext4@vger.kernel.org>); | ||||
| 	Wed, 20 Sep 2006 04:56:30 -0400 | ||||
| Received: from localhost (localhost [127.0.0.1]) | ||||
| 	by ecfrec.frec.bull.fr (Postfix) with ESMTP id 8B9F219D943 | ||||
| 	for <linux-ext4@vger.kernel.org>; Wed, 20 Sep 2006 10:56:28 +0200 (CEST) | ||||
| Received: from ecfrec.frec.bull.fr ([127.0.0.1]) | ||||
|  by localhost (ecfrec.frec.bull.fr [127.0.0.1]) (amavisd-new, port 10024) | ||||
|  with ESMTP id 22796-03 for <linux-ext4@vger.kernel.org>; | ||||
|  Wed, 20 Sep 2006 10:56:25 +0200 (CEST) | ||||
| Received: from ecn002.frec.bull.fr (ecn002.frec.bull.fr [129.183.4.6]) | ||||
| 	by ecfrec.frec.bull.fr (Postfix) with ESMTP id 8D8AB19D94C | ||||
| 	for <linux-ext4@vger.kernel.org>; Wed, 20 Sep 2006 10:56:09 +0200 (CEST) | ||||
| Received: from openx1.frec.bull.fr ([129.183.10.3]) | ||||
|           by ecn002.frec.bull.fr (Lotus Domino Release 5.0.12) | ||||
|           with ESMTP id 2006092011020109:122246 ; | ||||
|           Wed, 20 Sep 2006 11:02:01 +0200  | ||||
| Received: by openx1.frec.bull.fr (Postfix, from userid 15348) | ||||
| 	id 7751E139B4; Wed, 20 Sep 2006 10:56:08 +0200 (CEST) | ||||
| Date: 	Wed, 20 Sep 2006 10:56:08 +0200 | ||||
| From: Alexandre Ratchov <alexandre.ratchov@bull.net> | ||||
| To: linux-ext4@vger.kernel.org | ||||
| Cc: Jean-Pierre Dion <jean-pierre.dion@bull.net> | ||||
| Subject: [patch] small fix for e2p_percent() | ||||
| Message-ID: <20060920085608.GA18351@openx1.frec.bull.fr> | ||||
| Mime-Version: 1.0 | ||||
| User-Agent: Mutt/1.4.1i | ||||
| X-MIMETrack: Itemize by SMTP Server on ECN002/FR/BULL(Release 5.0.12  |February 13, 2003) at | ||||
|  20/09/2006 11:02:01, | ||||
| 	Serialize by Router on ECN002/FR/BULL(Release 5.0.12  |February 13, 2003) at | ||||
|  20/09/2006 11:02:02, | ||||
| 	Serialize complete at 20/09/2006 11:02:02 | ||||
| Content-Type: text/plain; charset=us-ascii | ||||
| Content-Disposition: inline | ||||
| X-Virus-Scanned: by amavisd-new at frec.bull.fr | ||||
| Sender: linux-ext4-owner@vger.kernel.org | ||||
| Precedence: bulk | ||||
| X-Mailing-List: 	linux-ext4@vger.kernel.org | ||||
| X-RedHat-Spam-Score: 0  | ||||
| 
 | ||||
| hello, | ||||
| 
 | ||||
| e2p_percent() doesn't work for zero percent (``mke2fs -m0'' gets killed with | ||||
| SIGFPE). | ||||
| 
 | ||||
| is there a reason for not simply using 64 bit arithmetic? perhaps to avoid | ||||
| overflows for 7e+9TB file-systems :-), or just for correctness... | ||||
| 
 | ||||
| So, here is the patch that fixes this. In order to avoid integer overflows, | ||||
| we pick 16 more bits to store ``base'' and do the exact division on 48 bits. | ||||
| Since ``100 * base'' always fits in 48 bits, there's never overflow. This | ||||
| still work if we remplace 'unsigned int' by 'unsigned long long'. | ||||
| 
 | ||||
| cheers, | ||||
| 
 | ||||
| -- Alexandre
 | ||||
| 
 | ||||
| Signed-off-by: Alexandre Ratchov <alexandre.ratchov@bull.net> | ||||
| 
 | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/e2p/percent.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/e2p/percent.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/e2p/percent.c
 | ||||
| @@ -14,18 +14,41 @@
 | ||||
|  /* | ||||
|   * We work really hard to calculate this accurately, while avoiding | ||||
|   * an overflow.  "Is there a hyphen in anal-retentive?"  :-) | ||||
| + *
 | ||||
| + * -- "Yes there is, as in hair-splitting and nit-picking"
 | ||||
|   */ | ||||
|  unsigned int e2p_percent(int percent, unsigned int base) | ||||
|  { | ||||
| -	unsigned int mask = ~((1 << (sizeof(unsigned int) - 1) * 8) - 1);
 | ||||
| +	unsigned hi, lo, q, r;
 | ||||
|   | ||||
| -	if (100 % percent == 0)
 | ||||
| -		return base / (100 / percent);
 | ||||
| -	if (mask & base) 
 | ||||
| -		return (base / 100) * percent;
 | ||||
| -	return base * percent / 100;
 | ||||
| +	/* 
 | ||||
| +	 * in order to avoid overflow we write 'base' as:
 | ||||
| +	 *
 | ||||
| +	 *	base = hi * 2^16 + lo 
 | ||||
| +	 * 
 | ||||
| +	 * then we do all computations separately on 'hi' and 'lo'.
 | ||||
| +	 * By using the definition of division:
 | ||||
| +	 *
 | ||||
| +	 *	precent * base = result * 100 + reminder
 | ||||
| +	 *
 | ||||
| +	 * (reminder < 100), we obtain the exact value of 'result' 
 | ||||
| +	 * as follows:
 | ||||
| +	 */
 | ||||
| +#define BITS	16
 | ||||
| +#define MASK	((1 << BITS) - 1)
 | ||||
| +
 | ||||
| +	hi = percent * (base >> BITS);
 | ||||
| +	lo = percent * (base & MASK);
 | ||||
| +
 | ||||
| +	q = ((hi / 100) << BITS) + lo / 100;
 | ||||
| +	r = ((hi % 100) << BITS) + lo % 100;
 | ||||
| +		
 | ||||
| +	return q + r / 100;
 | ||||
| +#undef BITS
 | ||||
| +#undef MASK
 | ||||
|  } | ||||
|   | ||||
| +
 | ||||
|  #ifdef DEBUG | ||||
|  #include <unistd.h> | ||||
|  #include <stdio.h> | ||||
| @ -1,282 +0,0 @@ | ||||
| # HG changeset patch | ||||
| # User tytso@mit.edu | ||||
| # Date Wed Aug 30 01:57:00 2006 -0400 | ||||
| # Node ID 59f8a8974d914231642239f176284d92dce0678d | ||||
| # parent: c76ddbe4519a571de3868c2888d8bb99a559046f | ||||
| Fix potential 2**32-1 overflow problems by ext2fs_div_ceil() | ||||
| 
 | ||||
| Add a new function, ext2fs_div_ceil(), which correctly calculates a division | ||||
| of two unsigned integer where the result is always rounded up the next | ||||
| largest integer.   This is used everywhere where we might have | ||||
| previously caused an overflow when the number of blocks | ||||
| or inodes is too close to 2**32-1. | ||||
| 
 | ||||
| Based on patches from Eric Sandeen, but generalized to use this new function | ||||
| 
 | ||||
| Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> | ||||
| Signed-off-by: Eric Sandeen <esandeen@redhat.com> | ||||
| 
 | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/ext2ed/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/ext2ed/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/ext2ed/ChangeLog
 | ||||
| @@ -1,3 +1,8 @@
 | ||||
| +2006-08-30  Theodore Tso  <tytso@mit.edu>
 | ||||
| +
 | ||||
| +	* init.c (div_ceil, set_file_system_info): Fix potential overflow
 | ||||
| +		for really big filesystems.
 | ||||
| +
 | ||||
|  2006-06-30  Theodore Ts'o  <tytso@mit.edu> | ||||
|   | ||||
|  	* Release of E2fsprogs 1.38 | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/ext2ed/init.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/ext2ed/init.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/ext2ed/init.c
 | ||||
| @@ -370,6 +370,13 @@ void add_user_command (struct struct_com
 | ||||
|  	ptr->callback [num]=callback; | ||||
|  } | ||||
|   | ||||
| +static unsigned int div_ceil(unsigned int a, unsigned int b)
 | ||||
| +{
 | ||||
| +	if (!a)
 | ||||
| +		return 0;
 | ||||
| +	return ((a - 1) / b) + 1;
 | ||||
| +}
 | ||||
| +
 | ||||
|  int set_file_system_info (void) | ||||
|   | ||||
|  { | ||||
| @@ -415,8 +422,8 @@ int set_file_system_info (void)
 | ||||
|  			file_system_info.first_group_desc_offset=2*EXT2_MIN_BLOCK_SIZE; | ||||
|  		else | ||||
|  			file_system_info.first_group_desc_offset=file_system_info.block_size; | ||||
| -		file_system_info.groups_count=(	sb->s_blocks_count-sb->s_first_data_block+sb->s_blocks_per_group-1) /
 | ||||
| -						sb->s_blocks_per_group;
 | ||||
| +		file_system_info.groups_count = div_ceil(sb->s_blocks_count, 
 | ||||
| +						 sb->s_blocks_per_group);
 | ||||
|  	 | ||||
|  		file_system_info.inodes_per_block=file_system_info.block_size/sizeof (struct ext2_inode); | ||||
|  		file_system_info.blocks_per_group=sb->s_inodes_per_group/file_system_info.inodes_per_block; | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/ext2fs/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/ChangeLog
 | ||||
| @@ -1,3 +1,14 @@
 | ||||
| +2006-08-30  Theodore Tso  <tytso@mit.edu>
 | ||||
| +
 | ||||
| +	* ext2fs.h (ext2fs_div_ceil): Add new function which safely
 | ||||
| +		calculates an integer division where the result is always
 | ||||
| +		rounded up while avoiding overflow errors.
 | ||||
| +
 | ||||
| +	* initialize.c (calc_reserved_gdt_blocks, ext2fs_initialize):
 | ||||
| +	* openfs.c (ext2fs_open2): Use ext2fs_div_ceil() instead of a 
 | ||||
| +		using an open-coded expression which was subject to 
 | ||||
| +		overflows.
 | ||||
| +
 | ||||
|  2006-05-21  Theodore Tso  <tytso@mit.edu> | ||||
|   | ||||
|  	* openfs.c (ext2fs_open2): Fix type warning problem with sizeof() | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/ext2fs.h
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/ext2fs/ext2fs.h
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/ext2fs.h
 | ||||
| @@ -969,6 +969,7 @@ extern int ext2fs_group_of_blk(ext2_fils
 | ||||
|  extern int ext2fs_group_of_ino(ext2_filsys fs, ext2_ino_t ino); | ||||
|  extern blk_t ext2fs_inode_data_blocks(ext2_filsys fs, | ||||
|  				      struct ext2_inode *inode); | ||||
| +extern unsigned int ext2fs_div_ceil(unsigned int a, unsigned int b);
 | ||||
|   | ||||
|  /* | ||||
|   * The actual inlined functions definitions themselves... | ||||
| @@ -1136,6 +1137,16 @@ _INLINE_ blk_t ext2fs_inode_data_blocks(
 | ||||
|         return inode->i_blocks - | ||||
|                (inode->i_file_acl ? fs->blocksize >> 9 : 0); | ||||
|  } | ||||
| +
 | ||||
| +/*
 | ||||
| + * This is an efficient, overflow safe way of calculating ceil((1.0 * a) / b)
 | ||||
| + */
 | ||||
| +_INLINE_ unsigned int ext2fs_div_ceil(unsigned int a, unsigned int b)
 | ||||
| +{
 | ||||
| +	if (!a)
 | ||||
| +		return 0;
 | ||||
| +	return ((a - 1) / b) + 1;
 | ||||
| +}
 | ||||
|  #undef _INLINE_ | ||||
|  #endif | ||||
|   | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/initialize.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/ext2fs/initialize.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/initialize.c
 | ||||
| @@ -77,8 +77,8 @@ static unsigned int calc_reserved_gdt_bl
 | ||||
|  	 */ | ||||
|  	if (sb->s_blocks_count < max_blocks / 1024) | ||||
|  		max_blocks = sb->s_blocks_count * 1024; | ||||
| -	rsv_groups = (max_blocks - sb->s_first_data_block + bpg - 1) / bpg;
 | ||||
| -	rsv_gdb = (rsv_groups + gdpb - 1) / gdpb - fs->desc_blocks;
 | ||||
| +	rsv_groups = ext2fs_div_ceil(max_blocks - sb->s_first_data_block, bpg);
 | ||||
| +	rsv_gdb = ext2fs_div_ceil(rsv_groups, gdpb) - fs->desc_blocks;
 | ||||
|  	if (rsv_gdb > EXT2_ADDR_PER_BLOCK(sb)) | ||||
|  		rsv_gdb = EXT2_ADDR_PER_BLOCK(sb); | ||||
|  #ifdef RES_GDT_DEBUG | ||||
| @@ -205,17 +205,15 @@ errcode_t ext2fs_initialize(const char *
 | ||||
|  	} | ||||
|   | ||||
|  retry: | ||||
| -	fs->group_desc_count = (super->s_blocks_count -
 | ||||
| -				super->s_first_data_block +
 | ||||
| -				EXT2_BLOCKS_PER_GROUP(super) - 1)
 | ||||
| -		/ EXT2_BLOCKS_PER_GROUP(super);
 | ||||
| +	fs->group_desc_count = ext2fs_div_ceil(super->s_blocks_count -
 | ||||
| +					       super->s_first_data_block,
 | ||||
| +					       EXT2_BLOCKS_PER_GROUP(super));
 | ||||
|  	if (fs->group_desc_count == 0) { | ||||
|  		retval = EXT2_ET_TOOSMALL; | ||||
|  		goto cleanup; | ||||
|  	} | ||||
| -	fs->desc_blocks = (fs->group_desc_count +
 | ||||
| -			   EXT2_DESC_PER_BLOCK(super) - 1)
 | ||||
| -		/ EXT2_DESC_PER_BLOCK(super);
 | ||||
| +	fs->desc_blocks = ext2fs_div_ceil(fs->group_desc_count,
 | ||||
| +					  EXT2_DESC_PER_BLOCK(super));
 | ||||
|   | ||||
|  	i = fs->blocksize >= 4096 ? 1 : 4096 / fs->blocksize; | ||||
|  	set_field(s_inodes_count, super->s_blocks_count / i); | ||||
| @@ -233,8 +231,7 @@ retry:
 | ||||
|  	 * should be.  But make sure that we don't allocate more than | ||||
|  	 * one bitmap's worth of inodes each group. | ||||
|  	 */ | ||||
| -	ipg = (super->s_inodes_count + fs->group_desc_count - 1) /
 | ||||
| -		fs->group_desc_count;
 | ||||
| +	ipg = ext2fs_div_ceil(super->s_inodes_count, fs->group_desc_count);
 | ||||
|  	if (ipg > fs->blocksize * 8) { | ||||
|  		if (super->s_blocks_per_group >= 256) { | ||||
|  			/* Try again with slightly different parameters */ | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/openfs.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/ext2fs/openfs.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/openfs.c
 | ||||
| @@ -258,12 +258,11 @@ errcode_t ext2fs_open2(const char *name,
 | ||||
|  		retval = EXT2_ET_CORRUPT_SUPERBLOCK; | ||||
|  		goto cleanup; | ||||
|  	} | ||||
| -	fs->group_desc_count = (fs->super->s_blocks_count -
 | ||||
| -				fs->super->s_first_data_block +
 | ||||
| -				blocks_per_group - 1) / blocks_per_group;
 | ||||
| -	fs->desc_blocks = (fs->group_desc_count +
 | ||||
| -			   EXT2_DESC_PER_BLOCK(fs->super) - 1)
 | ||||
| -		/ EXT2_DESC_PER_BLOCK(fs->super);
 | ||||
| +	fs->group_desc_count = ext2fs_div_ceil(fs->super->s_blocks_count -
 | ||||
| +					       fs->super->s_first_data_block,
 | ||||
| +					       blocks_per_group);
 | ||||
| +	fs->desc_blocks = ext2fs_div_ceil(fs->group_desc_count,
 | ||||
| +					  EXT2_DESC_PER_BLOCK(fs->super));
 | ||||
|  	retval = ext2fs_get_mem(fs->desc_blocks * fs->blocksize, | ||||
|  				&fs->group_desc); | ||||
|  	if (retval) | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/misc/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/misc/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/misc/ChangeLog
 | ||||
| @@ -1,3 +1,12 @@
 | ||||
| +2006-08-30  Theodore Tso  <tytso@mit.edu>
 | ||||
| +
 | ||||
| +	* mke2fs.c (parse_extended_opts): Use ext2fs_div_ceil() instead of
 | ||||
| +		a using an open-coded expression which was subject to
 | ||||
| +		overflows.
 | ||||
| +
 | ||||
| +	* filefrag.c (div_ceil, frag_report): Fix potential overflow for
 | ||||
| +		really big filesystems.
 | ||||
| +
 | ||||
|  2006-05-29  Theodore Tso  <tytso@mit.edu> | ||||
|   | ||||
|  	* filefrag.c: Add support for ancient Linux systems that do not | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/misc/filefrag.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/misc/filefrag.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/misc/filefrag.c
 | ||||
| @@ -47,6 +47,13 @@ int verbose = 0;
 | ||||
|  #define EXT3_EXTENTS_FL			0x00080000 /* Inode uses extents */ | ||||
|  #define	EXT3_IOC_GETFLAGS		_IOR('f', 1, long) | ||||
|   | ||||
| +static unsigned int div_ceil(unsigned int a, unsigned int b)
 | ||||
| +{
 | ||||
| +	if (!a)
 | ||||
| +		return 0;
 | ||||
| +	return ((a - 1) / b) + 1;
 | ||||
| +}
 | ||||
| +
 | ||||
|  static unsigned long get_bmap(int fd, unsigned long block) | ||||
|  { | ||||
|  	int	ret; | ||||
| @@ -105,7 +112,7 @@ static void frag_report(const char *file
 | ||||
|  	if (verbose) { | ||||
|  		printf("Filesystem type is: %x\n", fsinfo.f_type); | ||||
|  	} | ||||
| -	cylgroups = (fsinfo.f_blocks + fsinfo.f_bsize*8-1) / fsinfo.f_bsize*8;
 | ||||
| +	cylgroups = div_ceil(fsinfo.f_blocks, fsinfo.f_bsize*8);
 | ||||
|  	if (verbose) { | ||||
|  		printf("Filesystem cylinder groups is approximately %ld\n",  | ||||
|  		       cylgroups); | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/misc/mke2fs.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/misc/mke2fs.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/misc/mke2fs.c
 | ||||
| @@ -819,12 +819,12 @@ static void parse_extended_opts(struct e
 | ||||
|  			if (!bpg) | ||||
|  				bpg = blocksize * 8; | ||||
|  			gdpb = blocksize / sizeof(struct ext2_group_desc); | ||||
| -			group_desc_count = (param->s_blocks_count +
 | ||||
| -					    bpg - 1) / bpg;
 | ||||
| +			group_desc_count = 
 | ||||
| +				ext2fs_div_ceil(param->s_blocks_count, bpg);
 | ||||
|  			desc_blocks = (group_desc_count + | ||||
|  				       gdpb - 1) / gdpb; | ||||
| -			rsv_groups = (resize + bpg - 1) / bpg;
 | ||||
| -			rsv_gdb = (rsv_groups + gdpb - 1) / gdpb - 
 | ||||
| +			rsv_groups = ext2fs_div_ceil(resize, bpg);
 | ||||
| +			rsv_gdb = ext2fs_div_ceil(rsv_groups, gdpb) - 
 | ||||
|  				desc_blocks; | ||||
|  			if (rsv_gdb > (int) EXT2_ADDR_PER_BLOCK(param)) | ||||
|  				rsv_gdb = EXT2_ADDR_PER_BLOCK(param); | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/resize/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/resize/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/resize/ChangeLog
 | ||||
| @@ -1,3 +1,9 @@
 | ||||
| +2006-08-30  Theodore Tso  <tytso@mit.edu>
 | ||||
| +
 | ||||
| +	* resize2fs.c (adjust_fs_info): Use ext2fs_div_ceil() instead of a
 | ||||
| +		using an open-coded expression which was subject to
 | ||||
| +		overflows.
 | ||||
| +
 | ||||
|  2006-05-22  Theodore Tso  <tytso@mit.edu> | ||||
|   | ||||
|  	* resize2fs.8.in: Fixed spelling mistake (Addresses Debian Bug: | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/resize/resize2fs.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/resize/resize2fs.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/resize/resize2fs.c
 | ||||
| @@ -190,15 +190,13 @@ errcode_t adjust_fs_info(ext2_filsys fs,
 | ||||
|  	fs->super->s_blocks_count = new_size; | ||||
|   | ||||
|  retry: | ||||
| -	fs->group_desc_count = (fs->super->s_blocks_count -
 | ||||
| -				fs->super->s_first_data_block +
 | ||||
| -				EXT2_BLOCKS_PER_GROUP(fs->super) - 1)
 | ||||
| -		/ EXT2_BLOCKS_PER_GROUP(fs->super);
 | ||||
| +	fs->group_desc_count = ext2fs_div_ceil(fs->super->s_blocks_count -
 | ||||
| +				       fs->super->s_first_data_block,
 | ||||
| +				       EXT2_BLOCKS_PER_GROUP(fs->super));
 | ||||
|  	if (fs->group_desc_count == 0) | ||||
|  		return EXT2_ET_TOOSMALL; | ||||
| -	fs->desc_blocks = (fs->group_desc_count +
 | ||||
| -			   EXT2_DESC_PER_BLOCK(fs->super) - 1)
 | ||||
| -		/ EXT2_DESC_PER_BLOCK(fs->super);
 | ||||
| +	fs->desc_blocks = ext2fs_div_ceil(fs->group_desc_count, 
 | ||||
| +					  EXT2_DESC_PER_BLOCK(fs->super));
 | ||||
|   | ||||
|  	/* | ||||
|  	 * Overhead is the number of bookkeeping blocks per group.  It | ||||
| @ -1,151 +0,0 @@ | ||||
| # HG changeset patch | ||||
| # User tytso@mit.edu | ||||
| # Date Wed Aug 30 02:16:55 2006 -0400 | ||||
| # Node ID 14e45223b10be14cc318f10b804a3fd535a86ad5 | ||||
| # parent: d609388faa895de79ff143e53f8ed04557048c42 | ||||
| Detect overflows in loop counters | ||||
| 
 | ||||
| For loops such as: | ||||
| 
 | ||||
| for (i=1; i <= fs->super->s_blocks_count; i++) { | ||||
|         <do_stuff> | ||||
| } | ||||
| 
 | ||||
| if i is an int and s_blocks_count is (2^32-1), the condition is never false. | ||||
| Change these loops to: | ||||
| 
 | ||||
| for (i=1; i <= fs->super->s_blocks_count && i > 0; i++) { | ||||
|         <do_stuff> | ||||
| } | ||||
| 
 | ||||
| to stop the loop when we overflow i | ||||
| 
 | ||||
| Signed-off-by: Eric Sandeen <esandeen@redhat.com> | ||||
| Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> | ||||
| 
 | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/e2fsck/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/e2fsck/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/e2fsck/ChangeLog
 | ||||
| @@ -1,3 +1,9 @@
 | ||||
| +2006-08-30  Theodore Tso  <tytso@mit.edu>
 | ||||
| +
 | ||||
| +	* pass5.c (check_inode_bitmaps, check_inode_end, check_block_end):
 | ||||
| +	* pass4.c (e2fsck_pass4): Fix potential overflow problems when the
 | ||||
| +		number of blocks is close to 2**31.
 | ||||
| +
 | ||||
|  2006-05-29  Theodore Tso  <tytso@mit.edu> | ||||
|   | ||||
|  	* pass1b.c: Add missing semicolon when HAVE_INTPTR_T is not defined | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/e2fsck/pass4.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/e2fsck/pass4.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/e2fsck/pass4.c
 | ||||
| @@ -110,8 +110,9 @@ void e2fsck_pass4(e2fsck_t ctx)
 | ||||
|  	if (ctx->progress) | ||||
|  		if ((ctx->progress)(ctx, 4, 0, maxgroup)) | ||||
|  			return; | ||||
| -	
 | ||||
| -	for (i=1; i <= fs->super->s_inodes_count; i++) {
 | ||||
| +
 | ||||
| +	/* Protect loop from wrap-around if s_inodes_count maxed */
 | ||||
| +	for (i=1; i <= fs->super->s_inodes_count && i > 0; i++) {
 | ||||
|  		if (ctx->flags & E2F_FLAG_SIGNAL_MASK) | ||||
|  			return; | ||||
|  		if ((i % fs->super->s_inodes_per_group) == 0) { | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/e2fsck/pass5.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/e2fsck/pass5.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/e2fsck/pass5.c
 | ||||
| @@ -370,7 +370,8 @@ redo_counts:
 | ||||
|  			EXT2_BG_INODE_UNINIT)) | ||||
|  		skip_group++; | ||||
|   | ||||
| -	for (i = 1; i <= fs->super->s_inodes_count; i++) {
 | ||||
| +	/* Protect loop from wrap-around if inodes_count is maxed */
 | ||||
| +	for (i = 1; i <= fs->super->s_inodes_count && i > 0; i++) {
 | ||||
|  		actual = ext2fs_fast_test_inode_bitmap(ctx->inode_used_map, i); | ||||
|  		if (skip_group)  | ||||
|  			bitmap = 0; | ||||
| @@ -528,8 +529,9 @@ static void check_inode_end(e2fsck_t ctx
 | ||||
|  	} | ||||
|  	if (save_inodes_count == end) | ||||
|  		return; | ||||
| -	
 | ||||
| -	for (i = save_inodes_count + 1; i <= end; i++) {
 | ||||
| +
 | ||||
| +	/* 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)) { | ||||
|  			if (fix_problem(ctx, PR_5_INODE_BMAP_PADDING, &pctx)) { | ||||
|  				for (i = save_inodes_count + 1; i <= end; i++) | ||||
| @@ -572,8 +574,9 @@ static void check_block_end(e2fsck_t ctx
 | ||||
|  	} | ||||
|  	if (save_blocks_count == end) | ||||
|  		return; | ||||
| -	
 | ||||
| -	for (i = save_blocks_count + 1; i <= end; i++) {
 | ||||
| +
 | ||||
| +	/* 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_bitmap(fs->block_map, i)) { | ||||
|  			if (fix_problem(ctx, PR_5_BLOCK_BMAP_PADDING, &pctx)) { | ||||
|  				for (i = save_blocks_count + 1; i <= end; i++) | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/ext2fs/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/ChangeLog
 | ||||
| @@ -1,5 +1,8 @@
 | ||||
|  2006-08-30  Theodore Tso  <tytso@mit.edu> | ||||
|   | ||||
| +	* bitmaps.c (ext2fs_set_bitmap_padding): Fix potential overflow
 | ||||
| +		problems when the number of blocks is close to 2**31.
 | ||||
| +
 | ||||
|  	* ext2fs.h (ext2fs_div_ceil): Add new function which safely | ||||
|  		calculates an integer division where the result is always | ||||
|  		rounded up while avoiding overflow errors. | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/bitmaps.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/ext2fs/bitmaps.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/bitmaps.c
 | ||||
| @@ -102,7 +102,10 @@ void ext2fs_set_bitmap_padding(ext2fs_ge
 | ||||
|  { | ||||
|  	__u32	i, j; | ||||
|   | ||||
| -	for (i=map->end+1, j = i - map->start; i <= map->real_end; i++, j++)
 | ||||
| +	/* Protect loop from wrap-around if map->real_end is maxed */
 | ||||
| +	for (i=map->end+1, j = i - map->start; 
 | ||||
| +	     i <= map->real_end && i > map->end; 
 | ||||
| +	     i++, j++)
 | ||||
|  		ext2fs_set_bit(j, map->bitmap); | ||||
|   | ||||
|  	return; | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/resize/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/resize/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/resize/ChangeLog
 | ||||
| @@ -1,5 +1,9 @@
 | ||||
|  2006-08-30  Theodore Tso  <tytso@mit.edu> | ||||
|   | ||||
| +	* resize2fs.c (ext2fs_calculate_summary_stats): Fix potential
 | ||||
| +		overflow problems when the number of blocks is close to
 | ||||
| +		2**31.
 | ||||
| +
 | ||||
|  	* resize2fs.c (adjust_fs_info): Use ext2fs_div_ceil() instead of a | ||||
|  		using an open-coded expression which was subject to | ||||
|  		overflows. | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/resize/resize2fs.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/resize/resize2fs.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/resize/resize2fs.c
 | ||||
| @@ -1582,7 +1582,9 @@ static errcode_t ext2fs_calculate_summar
 | ||||
|  	total_free = 0; | ||||
|  	count = 0; | ||||
|  	group = 0; | ||||
| -	for (ino = 1; ino <= fs->super->s_inodes_count; ino++) {
 | ||||
| +
 | ||||
| +	/* Protect loop from wrap-around if s_inodes_count maxed */
 | ||||
| +	for (ino = 1; ino <= fs->super->s_inodes_count && ino > 0; ino++) {
 | ||||
|  		if (!ext2fs_fast_test_inode_bitmap(fs->inode_map, ino)) { | ||||
|  			group_free++; | ||||
|  			total_free++; | ||||
| @ -1,552 +0,0 @@ | ||||
| # HG changeset patch | ||||
| # User tytso@mit.edu | ||||
| # Date Tue Sep 12 14:56:15 2006 -0400 | ||||
| # Node ID 4b504bc7413f5ef17f8b62f4b3479da6bfa83efb | ||||
| # parent: 59bf36fb8344bb7a3971af7df22d41f8d8b14610 | ||||
| Fix signed vs unsigned printf format strings for block and inode numbers | ||||
| 
 | ||||
| There were still some %d's lurking when we print blocks & inodes; also | ||||
| many of the counters in the e2fsck_struct were signed, and probably | ||||
| need to be unsigned to avoid overflows. | ||||
| 
 | ||||
| Signed-off-by: Eric Sandeen <esandeen@redhat.com> | ||||
| 
 | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/debugfs/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/debugfs/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/debugfs/ChangeLog
 | ||||
| @@ -1,3 +1,7 @@
 | ||||
| +2006-08-30  Eric Sandeen <esandeen@redhat.com>
 | ||||
| +
 | ||||
| +	* htree.c (htree_dump_int_node): Fix printf formats.
 | ||||
| +
 | ||||
|  2006-05-29  Theodore Tso  <tytso@mit.edu> | ||||
|   | ||||
|  	* util.c (reset_getopt): In order to support ancient Linux header | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/debugfs/htree.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/debugfs/htree.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/debugfs/htree.c
 | ||||
| @@ -114,7 +114,7 @@ static void htree_dump_int_node(ext2_fil
 | ||||
|   | ||||
|  	for (i=0; i < limit.count; i++) { | ||||
|  		hash = i ? ext2fs_le32_to_cpu(ent[i].hash) : 0; | ||||
| -		fprintf(pager, "Entry #%d: Hash 0x%08x%s, block %d\n", i,
 | ||||
| +		fprintf(pager, "Entry #%d: Hash 0x%08x%s, block %u\n", i,
 | ||||
|  			hash, (hash & 1) ? " (**)" : "", | ||||
|  			ext2fs_le32_to_cpu(ent[i].block)); | ||||
|  		} | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/e2fsck/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/e2fsck/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/e2fsck/ChangeLog
 | ||||
| @@ -1,5 +1,12 @@
 | ||||
|  2006-08-30  Eric Sandeen <esandeen@redhat.com> | ||||
|   | ||||
| +	* e2fsck.h (e2fsck): Use unsigned types for filesystem counters.
 | ||||
| +	* emptydir.c (add_empty_dirblock):
 | ||||
| +	* iscan.c (main):
 | ||||
| +	* unix.c (show_stats, check_if_skip): Fix printf formats.
 | ||||
| +
 | ||||
| +2006-08-30  Eric Sandeen <esandeen@redhat.com>
 | ||||
| +
 | ||||
|  	* pass1.c (handle_fs_bad_blocks): Remove unused variables. | ||||
|   | ||||
|  2006-08-30  Eric Sandeen <esandeen@redhat.com> | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/e2fsck/e2fsck.h
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/e2fsck/e2fsck.h
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/e2fsck/e2fsck.h
 | ||||
| @@ -306,24 +306,24 @@ struct e2fsck_struct {
 | ||||
|  	char start_meta[2], stop_meta[2]; | ||||
|  	 | ||||
|  	/* File counts */ | ||||
| -	int fs_directory_count;
 | ||||
| -	int fs_regular_count;
 | ||||
| -	int fs_blockdev_count;
 | ||||
| -	int fs_chardev_count;
 | ||||
| -	int fs_links_count;
 | ||||
| -	int fs_symlinks_count;
 | ||||
| -	int fs_fast_symlinks_count;
 | ||||
| -	int fs_fifo_count;
 | ||||
| -	int fs_total_count;
 | ||||
| -	int fs_badblocks_count;
 | ||||
| -	int fs_sockets_count;
 | ||||
| -	int fs_ind_count;
 | ||||
| -	int fs_dind_count;
 | ||||
| -	int fs_tind_count;
 | ||||
| -	int fs_fragmented;
 | ||||
| -	int large_files;
 | ||||
| -	int fs_ext_attr_inodes;
 | ||||
| -	int fs_ext_attr_blocks;
 | ||||
| +	__u32 fs_directory_count;
 | ||||
| +	__u32 fs_regular_count;
 | ||||
| +	__u32 fs_blockdev_count;
 | ||||
| +	__u32 fs_chardev_count;
 | ||||
| +	__u32 fs_links_count;
 | ||||
| +	__u32 fs_symlinks_count;
 | ||||
| +	__u32 fs_fast_symlinks_count;
 | ||||
| +	__u32 fs_fifo_count;
 | ||||
| +	__u32 fs_total_count;
 | ||||
| +	__u32 fs_badblocks_count;
 | ||||
| +	__u32 fs_sockets_count;
 | ||||
| +	__u32 fs_ind_count;
 | ||||
| +	__u32 fs_dind_count;
 | ||||
| +	__u32 fs_tind_count;
 | ||||
| +	__u32 fs_fragmented;
 | ||||
| +	__u32 large_files;
 | ||||
| +	__u32 fs_ext_attr_inodes;
 | ||||
| +	__u32 fs_ext_attr_blocks;
 | ||||
|   | ||||
|  	time_t now; | ||||
|   | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/e2fsck/emptydir.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/e2fsck/emptydir.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/e2fsck/emptydir.c
 | ||||
| @@ -94,7 +94,7 @@ void add_empty_dirblock(empty_dir_info e
 | ||||
|  	if (db->ino == 11) | ||||
|  		return;		/* Inode number 11 is usually lost+found */ | ||||
|   | ||||
| -	printf(_("Empty directory block %u (#%d) in inode %d\n"),
 | ||||
| +	printf(_("Empty directory block %u (#%d) in inode %u\n"),
 | ||||
|  	       db->blk, db->blockcnt, db->ino); | ||||
|   | ||||
|  	ext2fs_mark_block_bitmap(edi->empty_dir_blocks, db->blk); | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/e2fsck/iscan.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/e2fsck/iscan.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/e2fsck/iscan.c
 | ||||
| @@ -98,7 +98,7 @@ int main (int argc, char *argv[])
 | ||||
|  	int		exit_value = FSCK_OK; | ||||
|  	ext2_filsys	fs; | ||||
|  	ext2_ino_t	ino; | ||||
| -	int	num_inodes = 0;
 | ||||
| +	__u32	num_inodes = 0;
 | ||||
|  	struct ext2_inode inode; | ||||
|  	ext2_inode_scan	scan; | ||||
|  	 | ||||
| @@ -135,7 +135,7 @@ int main (int argc, char *argv[])
 | ||||
|  	} | ||||
|  	 | ||||
|  	print_resource_track(NULL, &global_rtrack); | ||||
| -	printf(_("%d inodes scanned.\n"), num_inodes);
 | ||||
| +	printf(_("%u inodes scanned.\n"), num_inodes);
 | ||||
|  	 | ||||
|  	exit(0); | ||||
|  } | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/e2fsck/unix.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/e2fsck/unix.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/e2fsck/unix.c
 | ||||
| @@ -98,7 +98,7 @@ static void usage(e2fsck_t ctx)
 | ||||
|  static void show_stats(e2fsck_t	ctx) | ||||
|  { | ||||
|  	ext2_filsys fs = ctx->fs; | ||||
| -	int inodes, inodes_used;
 | ||||
| +	__u32 inodes, inodes_used;
 | ||||
|  	blk_t blocks, blocks_used; | ||||
|  	int dir_links; | ||||
|  	int num_files, num_links; | ||||
| @@ -118,49 +118,48 @@ static void show_stats(e2fsck_t	ctx)
 | ||||
|  	frag_percent = (frag_percent + 5) / 10; | ||||
|  	 | ||||
|  	if (!verbose) { | ||||
| -		printf(_("%s: %d/%d files (%0d.%d%% non-contiguous), %u/%u blocks\n"),
 | ||||
| +		printf(_("%s: %u/%u files (%0d.%d%% non-contiguous), %u/%u blocks\n"),
 | ||||
|  		       ctx->device_name, inodes_used, inodes, | ||||
|  		       frag_percent / 10, frag_percent % 10, | ||||
|  		       blocks_used, blocks); | ||||
|  		return; | ||||
|  	} | ||||
| -	printf (P_("\n%8d inode used (%d%%)\n", "\n%8d inodes used (%d%%)\n",
 | ||||
| -		   inodes_used), inodes_used, 100 * inodes_used / inodes);
 | ||||
| -	printf (P_("%8d non-contiguous inode (%0d.%d%%)\n",
 | ||||
| -		   "%8d non-contiguous inodes (%0d.%d%%)\n",
 | ||||
| +	printf (P_("\n%8u inode used (%2.2f%%)\n", "\n%8u inodes used (%2.2f%%)\n",
 | ||||
| +		   inodes_used), inodes_used, 100.0 * inodes_used / inodes);
 | ||||
| +	printf (P_("%8u non-contiguous inode (%0d.%d%%)\n",
 | ||||
| +		   "%8u non-contiguous inodes (%0d.%d%%)\n",
 | ||||
|  		   ctx->fs_fragmented), | ||||
|  		ctx->fs_fragmented, frag_percent / 10, frag_percent % 10); | ||||
| -	printf (_("         # of inodes with ind/dind/tind blocks: %d/%d/%d\n"),
 | ||||
| +	printf (_("         # of inodes with ind/dind/tind blocks: %u/%u/%u\n"),
 | ||||
|  		ctx->fs_ind_count, ctx->fs_dind_count, ctx->fs_tind_count); | ||||
| -	printf (P_("%8u block used (%d%%)\n", "%8u blocks used (%d%%)\n",
 | ||||
| -		   blocks_used),
 | ||||
| -		blocks_used, (int) ((long long) 100 * blocks_used / blocks));
 | ||||
| -	printf (P_("%8d bad block\n", "%8d bad blocks\n",
 | ||||
| +	printf (P_("%8u block used (%2.2f%%)\n", "%8u blocks used (%2.2f%%)\n",
 | ||||
| +		   blocks_used), blocks_used, 100.0 * blocks_used / blocks);
 | ||||
| +	printf (P_("%8u bad block\n", "%8u bad blocks\n",
 | ||||
|  		   ctx->fs_badblocks_count), ctx->fs_badblocks_count); | ||||
| -	printf (P_("%8d large file\n", "%8d large files\n",
 | ||||
| +	printf (P_("%8u large file\n", "%8u large files\n",
 | ||||
|  		   ctx->large_files), ctx->large_files); | ||||
| -	printf (P_("\n%8d regular file\n", "\n%8d regular files\n",
 | ||||
| +	printf (P_("\n%8u regular file\n", "\n%8u regular files\n",
 | ||||
|  		   ctx->fs_regular_count), ctx->fs_regular_count); | ||||
| -	printf (P_("%8d directory\n", "%8d directories\n",
 | ||||
| +	printf (P_("%8u directory\n", "%8u directories\n",
 | ||||
|  		   ctx->fs_directory_count), ctx->fs_directory_count); | ||||
| -	printf (P_("%8d character device file\n",
 | ||||
| -		   "%8d character device files\n", ctx->fs_chardev_count),
 | ||||
| +	printf (P_("%8u character device file\n",
 | ||||
| +		   "%8u character device files\n", ctx->fs_chardev_count),
 | ||||
|  		ctx->fs_chardev_count); | ||||
| -	printf (P_("%8d block device file\n", "%8d block device files\n",
 | ||||
| +	printf (P_("%8u block device file\n", "%8u block device files\n",
 | ||||
|  		   ctx->fs_blockdev_count), ctx->fs_blockdev_count); | ||||
| -	printf (P_("%8d fifo\n", "%8d fifos\n", ctx->fs_fifo_count),
 | ||||
| +	printf (P_("%8u fifo\n", "%8u fifos\n", ctx->fs_fifo_count),
 | ||||
|  		ctx->fs_fifo_count); | ||||
| -	printf (P_("%8d link\n", "%8d links\n",
 | ||||
| +	printf (P_("%8u link\n", "%8u links\n",
 | ||||
|  		   ctx->fs_links_count - dir_links), | ||||
|  		ctx->fs_links_count - dir_links); | ||||
| -	printf (P_("%8d symbolic link", "%8d symbolic links",
 | ||||
| +	printf (P_("%8u symbolic link", "%8u symbolic links",
 | ||||
|  		   ctx->fs_symlinks_count), ctx->fs_symlinks_count); | ||||
| -	printf (P_(" (%d fast symbolic link)\n", " (%d fast symbolic links)\n",
 | ||||
| +	printf (P_(" (%u fast symbolic link)\n", " (%u fast symbolic links)\n",
 | ||||
|  		   ctx->fs_fast_symlinks_count), ctx->fs_fast_symlinks_count); | ||||
| -	printf (P_("%8d socket\n", "%8d sockets\n", ctx->fs_sockets_count),
 | ||||
| +	printf (P_("%8u socket\n", "%8u sockets\n", ctx->fs_sockets_count),
 | ||||
|  		ctx->fs_sockets_count); | ||||
|  	printf ("--------\n"); | ||||
| -	printf (P_("%8d file\n", "%8d files\n",
 | ||||
| +	printf (P_("%8u file\n", "%8u files\n",
 | ||||
|  		   ctx->fs_total_count - dir_links), | ||||
|  		ctx->fs_total_count - dir_links); | ||||
|  } | ||||
| @@ -300,7 +299,7 @@ static void check_if_skip(e2fsck_t ctx)
 | ||||
|  		fputs(_(", check forced.\n"), stdout); | ||||
|  		return; | ||||
|  	} | ||||
| -	printf(_("%s: clean, %d/%d files, %u/%u blocks"), ctx->device_name,
 | ||||
| +	printf(_("%s: clean, %u/%u files, %u/%u blocks"), ctx->device_name,
 | ||||
|  	       fs->super->s_inodes_count - fs->super->s_free_inodes_count, | ||||
|  	       fs->super->s_inodes_count, | ||||
|  	       fs->super->s_blocks_count - fs->super->s_free_blocks_count, | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/ext2fs/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/ChangeLog
 | ||||
| @@ -1,5 +1,17 @@
 | ||||
|  2006-08-30  Eric Sandeen <esandeen@redhat.com> | ||||
|   | ||||
| +	* bmove.c (process_block):
 | ||||
| +	* getsize.c (main):
 | ||||
| +	* icount.c (ext2fs_create_icount2, insert_icount_el):
 | ||||
| +	* tst_badblocks.c (print_list, validate_test_seq, do_test_seq):
 | ||||
| +	* tst_badblocks.c (invalid_proc):
 | ||||
| +	* tst_getsize.c (main):
 | ||||
| +	* tst_iscan.c (check_map):
 | ||||
| +	* unix_io.c (raw_read_blk, unix_read_blk):
 | ||||
| +	* write_bb_file.c (ext2fs_write_bb_FILE): Fix printf formats.
 | ||||
| +
 | ||||
| +2006-08-30  Eric Sandeen <esandeen@redhat.com>
 | ||||
| +
 | ||||
|  	* closefs.c (write_backup_super): | ||||
|  	* initialize.c (ext2fs_initialize): Remove unused variables. | ||||
|   | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/bmove.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/ext2fs/bmove.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/bmove.c
 | ||||
| @@ -73,7 +73,7 @@ static int process_block(ext2_filsys fs,
 | ||||
|  		ext2fs_mark_block_bitmap(pb->alloc_map, block); | ||||
|  		ret = BLOCK_CHANGED; | ||||
|  		if (pb->flags & EXT2_BMOVE_DEBUG) | ||||
| -			printf("ino=%ld, blockcnt=%lld, %d->%d\n", pb->ino,
 | ||||
| +			printf("ino=%ld, blockcnt=%lld, %u->%u\n", pb->ino,
 | ||||
|  			       blockcnt, orig, block); | ||||
|  	} | ||||
|  	if (pb->add_dir) { | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/getsize.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/ext2fs/getsize.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/getsize.c
 | ||||
| @@ -302,7 +302,7 @@ int main(int argc, char **argv)
 | ||||
|  			"while calling ext2fs_get_device_size"); | ||||
|  		exit(1); | ||||
|  	} | ||||
| -	printf("Device %s has %d 1k blocks.\n", argv[1], blocks);
 | ||||
| +	printf("Device %s has %u 1k blocks.\n", argv[1], blocks);
 | ||||
|  	exit(0); | ||||
|  } | ||||
|  #endif | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/icount.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/ext2fs/icount.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/icount.c
 | ||||
| @@ -116,7 +116,7 @@ errcode_t ext2fs_create_icount2(ext2_fil
 | ||||
|  	 | ||||
|  	bytes = (size_t) (icount->size * sizeof(struct ext2_icount_el)); | ||||
|  #if 0 | ||||
| -	printf("Icount allocated %d entries, %d bytes.\n",
 | ||||
| +	printf("Icount allocated %u entries, %d bytes.\n",
 | ||||
|  	       icount->size, bytes); | ||||
|  #endif | ||||
|  	retval = ext2fs_get_mem(bytes, &icount->list); | ||||
| @@ -176,7 +176,7 @@ static struct ext2_icount_el *insert_ico
 | ||||
|  		if (new_size < (icount->size + 100)) | ||||
|  			new_size = icount->size + 100; | ||||
|  #if 0 | ||||
| -		printf("Reallocating icount %d entries...\n", new_size);
 | ||||
| +		printf("Reallocating icount %u entries...\n", new_size);
 | ||||
|  #endif	 | ||||
|  		retval = ext2fs_resize_mem((size_t) icount->size * | ||||
|  					   sizeof(struct ext2_icount_el), | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/tst_badblocks.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/ext2fs/tst_badblocks.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/tst_badblocks.c
 | ||||
| @@ -103,7 +103,7 @@ static void print_list(badblocks_list bb
 | ||||
|  	} | ||||
|  	ok = i = 1; | ||||
|  	while (ext2fs_badblocks_list_iterate(iter, &blk)) { | ||||
| -		printf("%d ", blk);
 | ||||
| +		printf("%u ", blk);
 | ||||
|  		if (i++ != blk) | ||||
|  			ok = 0; | ||||
|  	} | ||||
| @@ -130,7 +130,7 @@ static void validate_test_seq(badblocks_
 | ||||
|  			ok = 0; | ||||
|  			test_fail++; | ||||
|  		} | ||||
| -		printf("\tblock %d is %s --- %s\n", vec[i],
 | ||||
| +		printf("\tblock %u is %s --- %s\n", vec[i],
 | ||||
|  		       match ? "present" : "absent", | ||||
|  		       ok ? "OK" : "NOT OK"); | ||||
|  	} | ||||
| @@ -145,7 +145,7 @@ static void do_test_seq(badblocks_list b
 | ||||
|  		case ADD_BLK: | ||||
|  			ext2fs_badblocks_list_add(bb, vec[i]); | ||||
|  			match = ext2fs_badblocks_list_test(bb, vec[i]); | ||||
| -			printf("Adding block %d --- now %s\n", vec[i], 
 | ||||
| +			printf("Adding block %u --- now %s\n", vec[i],
 | ||||
|  			       match ? "present" : "absent"); | ||||
|  			if (!match) { | ||||
|  				printf("FAILURE!\n"); | ||||
| @@ -155,7 +155,7 @@ static void do_test_seq(badblocks_list b
 | ||||
|  		case DEL_BLK: | ||||
|  			ext2fs_badblocks_list_del(bb, vec[i]); | ||||
|  			match = ext2fs_badblocks_list_test(bb, vec[i]); | ||||
| -			printf("Removing block %d --- now %s\n", vec[i], 
 | ||||
| +			printf("Removing block %u --- now %s\n", vec[i],
 | ||||
|  			       ext2fs_badblocks_list_test(bb, vec[i]) ?  | ||||
|  			       "present" : "absent"); | ||||
|  			if (match) { | ||||
| @@ -209,7 +209,7 @@ static void invalid_proc(ext2_filsys fs,
 | ||||
|  		printf("Expected invalid block\n"); | ||||
|  		test_expected_fail++; | ||||
|  	} else { | ||||
| -		printf("Invalid block #: %d\n", blk);
 | ||||
| +		printf("Invalid block #: %u\n", blk);
 | ||||
|  		test_fail++; | ||||
|  	} | ||||
|  } | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/tst_getsize.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/ext2fs/tst_getsize.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/tst_getsize.c
 | ||||
| @@ -39,6 +39,6 @@ int main(int argc, const char *argv[])
 | ||||
|  		com_err(argv[0], retval, "while getting device size"); | ||||
|  		exit(1); | ||||
|  	} | ||||
| -	printf("%s is device has %d blocks.\n", argv[1], blocks);
 | ||||
| +	printf("%s is device has %u blocks.\n", argv[1], blocks);
 | ||||
|  	return 0; | ||||
|  } | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/tst_iscan.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/ext2fs/tst_iscan.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/tst_iscan.c
 | ||||
| @@ -175,7 +175,7 @@ static void check_map(void)
 | ||||
|   | ||||
|  	for (i=0; test_vec[i]; i++) { | ||||
|  		if (ext2fs_test_block_bitmap(touched_map, test_vec[i])) { | ||||
| -			printf("Bad block was touched --- %d\n", test_vec[i]);
 | ||||
| +			printf("Bad block was touched --- %u\n", test_vec[i]);
 | ||||
|  			failed++; | ||||
|  			first_no_comma = 1; | ||||
|  		} | ||||
| @@ -199,7 +199,7 @@ static void check_map(void)
 | ||||
|  				first = 0; | ||||
|  			else | ||||
|  				printf(", "); | ||||
| -			printf("%d", i);
 | ||||
| +			printf("%u", i);
 | ||||
|  		} | ||||
|  	} | ||||
|  	printf("\n"); | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/unix_io.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/ext2fs/unix_io.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/unix_io.c
 | ||||
| @@ -170,8 +170,8 @@ static errcode_t raw_read_blk(io_channel
 | ||||
|  	size = (count < 0) ? -count : count * channel->block_size; | ||||
|  	location = ((ext2_loff_t) block * channel->block_size) + data->offset; | ||||
|  #ifdef DEBUG | ||||
| -	printf("count=%d, size=%d, block=%d, blk_size=%d, location=%lx\n",
 | ||||
| -	 		count, size, block, channel->block_size, location);
 | ||||
| +	printf("count=%d, size=%d, block=%lu, blk_size=%d, location=%llx\n",
 | ||||
| +	 		count, size, block, channel->block_size, (long long)location);
 | ||||
|  #endif | ||||
|  	if (ext2fs_llseek(data->dev, location, SEEK_SET) != location) { | ||||
|  		retval = errno ? errno : EXT2_ET_LLSEEK_FAILED; | ||||
| @@ -553,7 +553,7 @@ static errcode_t unix_read_blk(io_channe
 | ||||
|  		/* If it's in the cache, use it! */ | ||||
|  		if ((cache = find_cached_block(data, block, &reuse[0]))) { | ||||
|  #ifdef DEBUG | ||||
| -			printf("Using cached block %d\n", block);
 | ||||
| +			printf("Using cached block %lu\n", block);
 | ||||
|  #endif | ||||
|  			memcpy(cp, cache->buf, channel->block_size); | ||||
|  			count--; | ||||
| @@ -569,7 +569,7 @@ static errcode_t unix_read_blk(io_channe
 | ||||
|  			if (find_cached_block(data, block+i, &reuse[i])) | ||||
|  				break; | ||||
|  #ifdef DEBUG | ||||
| -		printf("Reading %d blocks starting at %d\n", i, block);
 | ||||
| +		printf("Reading %d blocks starting at %lu\n", i, block);
 | ||||
|  #endif | ||||
|  		if ((retval = raw_read_blk(channel, data, block, i, cp))) | ||||
|  			return retval; | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/write_bb_file.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/ext2fs/write_bb_file.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/write_bb_file.c
 | ||||
| @@ -27,7 +27,7 @@ errcode_t ext2fs_write_bb_FILE(ext2_badb
 | ||||
|  		return retval; | ||||
|   | ||||
|  	while (ext2fs_badblocks_list_iterate(bb_iter, &blk)) { | ||||
| -		fprintf(f, "%d\n", blk);
 | ||||
| +		fprintf(f, "%u\n", blk);
 | ||||
|  	} | ||||
|  	ext2fs_badblocks_list_iterate_end(bb_iter); | ||||
|  	return 0; | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/misc/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/misc/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/misc/ChangeLog
 | ||||
| @@ -1,5 +1,11 @@
 | ||||
|  2006-08-30  Eric Sandeen <esandeen@redhat.com> | ||||
|   | ||||
| +	* dumpe2fs.c (list_bad_blocks):
 | ||||
| +	* e2image.c (output_meta_data_blocks, write_raw_image_file):
 | ||||
| +	* mke2fs.c (test_disk, handle_bad_blocks): Fix printf formats.
 | ||||
| +
 | ||||
| +2006-08-30  Eric Sandeen <esandeen@redhat.com>
 | ||||
| +
 | ||||
|  	* e2image.c (mark_table_blocks): Remove unused first_block | ||||
|  		incrementing from loop. | ||||
|   | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/misc/dumpe2fs.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/misc/dumpe2fs.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/misc/dumpe2fs.c
 | ||||
| @@ -250,10 +250,10 @@ static void list_bad_blocks(ext2_filsys 
 | ||||
|  		return; | ||||
|  	} | ||||
|  	if (dump) { | ||||
| -		header = fmt = "%d\n";
 | ||||
| +		header = fmt = "%u\n";
 | ||||
|  	} else { | ||||
| -		header =  _("Bad blocks: %d");
 | ||||
| -		fmt = ", %d";
 | ||||
| +		header =  _("Bad blocks: %u");
 | ||||
| +		fmt = ", %u";
 | ||||
|  	} | ||||
|  	while (ext2fs_badblocks_list_iterate(bb_iter, &blk)) { | ||||
|  		printf(header ? header : fmt, blk); | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/misc/e2image.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/misc/e2image.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/misc/e2image.c
 | ||||
| @@ -417,7 +417,7 @@ static void output_meta_data_blocks(ext2
 | ||||
|  			retval = io_channel_read_blk(fs->io, blk, 1, buf); | ||||
|  			if (retval) { | ||||
|  				com_err(program_name, retval, | ||||
| -					"error reading block %d", blk);
 | ||||
| +					"error reading block %u", blk);
 | ||||
|  			} | ||||
|  			if (scramble_block_map &&  | ||||
|  			    ext2fs_test_block_bitmap(scramble_block_map, blk)) | ||||
| @@ -516,7 +516,7 @@ static void write_raw_image_file(ext2_fi
 | ||||
|  				       block_buf, process_dir_block, &pb); | ||||
|  			if (retval) { | ||||
|  				com_err(program_name, retval, | ||||
| -					"while iterating over inode %d", 
 | ||||
| +					"while iterating over inode %u",
 | ||||
|  					ino); | ||||
|  				exit(1); | ||||
|  			} | ||||
| @@ -529,7 +529,7 @@ static void write_raw_image_file(ext2_fi
 | ||||
|  				       process_file_block, &pb); | ||||
|  				if (retval) { | ||||
|  					com_err(program_name, retval, | ||||
| -					"while iterating over %d", ino);
 | ||||
| +					"while iterating over inode %u", ino);
 | ||||
|  					exit(1); | ||||
|  				} | ||||
|  			} | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/misc/mke2fs.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/misc/mke2fs.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/misc/mke2fs.c
 | ||||
| @@ -188,7 +188,7 @@ static void test_disk(ext2_filsys fs, ba
 | ||||
|  	errcode_t	retval; | ||||
|  	char		buf[1024]; | ||||
|   | ||||
| -	sprintf(buf, "badblocks -b %d -X %s%s%s %d", fs->blocksize,
 | ||||
| +	sprintf(buf, "badblocks -b %d -X %s%s%s %u", fs->blocksize,
 | ||||
|  		quiet ? "" : "-s ", (cflag > 1) ? "-w " : "", | ||||
|  		fs->device_name, fs->super->s_blocks_count); | ||||
|  	if (verbose) | ||||
| @@ -232,7 +232,7 @@ static void handle_bad_blocks(ext2_filsy
 | ||||
|  		if (ext2fs_badblocks_list_test(bb_list, i)) { | ||||
|  			fprintf(stderr, _("Block %d in primary " | ||||
|  				"superblock/group descriptor area bad.\n"), i); | ||||
| -			fprintf(stderr, _("Blocks %u through %d must be good "
 | ||||
| +			fprintf(stderr, _("Blocks %u through %u must be good "
 | ||||
|  				"in order to build a filesystem.\n"), | ||||
|  				fs->super->s_first_data_block, must_be_good); | ||||
|  			fputs(_("Aborting....\n"), stderr); | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/resize/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/resize/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/resize/ChangeLog
 | ||||
| @@ -1,5 +1,9 @@
 | ||||
|  2006-08-30  Eric Sandeen  <esandeen@redhat.com> | ||||
|   | ||||
| +	* online.c (online_resize_fs): Fix printf formats.
 | ||||
| +
 | ||||
| +2006-08-30  Eric Sandeen  <esandeen@redhat.com>
 | ||||
| +
 | ||||
|  	* resize2fs.c (mark_table_blocks): Remove unused variable. | ||||
|   | ||||
|  2006-08-30  Theodore Tso  <tytso@mit.edu> | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/resize/online.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/resize/online.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/resize/online.c
 | ||||
| @@ -74,7 +74,7 @@ errcode_t online_resize_fs(ext2_filsys f
 | ||||
|  	if (retval) | ||||
|  		return retval; | ||||
|   | ||||
| -	printf(_("Performing an on-line resize of %s to %d (%dk) blocks.\n"), 
 | ||||
| +	printf(_("Performing an on-line resize of %s to %u (%dk) blocks.\n"),
 | ||||
|  	       fs->device_name, *new_size, fs->blocksize / 1024); | ||||
|   | ||||
|  	size = fs->group_desc_count * sb->s_blocks_per_group +  | ||||
| @@ -116,7 +116,7 @@ errcode_t online_resize_fs(ext2_filsys f
 | ||||
|  		printf("new inode table is at 0x%04x-0x%04x\n",  | ||||
|  		       input.inode_table, | ||||
|  		       input.inode_table + new_fs->inode_blocks_per_group-1); | ||||
| -		printf("new group has %d blocks\n", input.blocks_count);
 | ||||
| +		printf("new group has %u blocks\n", input.blocks_count);
 | ||||
|  		printf("new group will reserve %d blocks\n",  | ||||
|  		       input.reserved_blocks); | ||||
|  		printf("new group has %d free blocks\n",  | ||||
| @ -1,288 +0,0 @@ | ||||
| # HG changeset patch | ||||
| # User tytso@mit.edu | ||||
| # Date Tue Sep 12 14:56:16 2006 -0400 | ||||
| # Node ID 1aa8aca8acebca38b38ee003c17a045bc5fde185 | ||||
| # parent: 4b504bc7413f5ef17f8b62f4b3479da6bfa83efb | ||||
| Create new ext2fs library inlines: ext2fs_group_{first,last}_block() | ||||
| 
 | ||||
| Create new ext2fs library inline functions in order to calculate | ||||
| the starting and ending blocks in a block group. | ||||
| 
 | ||||
| Signed-off-by: Eric Sandeen <esandeen@redhat.com> | ||||
| 
 | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/e2fsck/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/e2fsck/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/e2fsck/ChangeLog
 | ||||
| @@ -1,5 +1,11 @@
 | ||||
|  2006-08-30  Eric Sandeen <esandeen@redhat.com> | ||||
|   | ||||
| +	* pass1.c (new_table_block, handle_fs_bad_blocks):
 | ||||
| +	* super.c (check_super_block):
 | ||||
| +		Use new inlines to calculate group first & last blocks.
 | ||||
| +
 | ||||
| +2006-08-30  Eric Sandeen <esandeen@redhat.com>
 | ||||
| +
 | ||||
|  	* e2fsck.h (e2fsck): Use unsigned types for filesystem counters. | ||||
|  	* emptydir.c (add_empty_dirblock): | ||||
|  	* iscan.c (main): | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/e2fsck/pass1.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/e2fsck/pass1.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/e2fsck/pass1.c
 | ||||
| @@ -1890,6 +1890,7 @@ static void new_table_block(e2fsck_t ctx
 | ||||
|  { | ||||
|  	ext2_filsys fs = ctx->fs; | ||||
|  	blk_t		old_block = *new_block; | ||||
| +	blk_t		last_block;
 | ||||
|  	int		i; | ||||
|  	char		*buf; | ||||
|  	struct problem_context	pctx; | ||||
| @@ -1900,8 +1901,8 @@ static void new_table_block(e2fsck_t ctx
 | ||||
|  	pctx.blk = old_block; | ||||
|  	pctx.str = name; | ||||
|   | ||||
| -	pctx.errcode = ext2fs_get_free_blocks(fs, first_block,
 | ||||
| -			first_block + fs->super->s_blocks_per_group,
 | ||||
| +	last_block = ext2fs_group_last_block(fs, group);
 | ||||
| +	pctx.errcode = ext2fs_get_free_blocks(fs, first_block, last_block,
 | ||||
|  					num, ctx->block_found_map, new_block); | ||||
|  	if (pctx.errcode) { | ||||
|  		pctx.num = num; | ||||
| @@ -1952,9 +1953,11 @@ static void handle_fs_bad_blocks(e2fsck_
 | ||||
|  { | ||||
|  	ext2_filsys fs = ctx->fs; | ||||
|  	dgrp_t		i; | ||||
| -	int		first_block = fs->super->s_first_data_block;
 | ||||
| +	int		first_block;
 | ||||
|   | ||||
|  	for (i = 0; i < fs->group_desc_count; i++) { | ||||
| +		first_block = ext2fs_group_first_block(fs, i);
 | ||||
| +
 | ||||
|  		if (ctx->invalid_block_bitmap_flag[i]) { | ||||
|  			new_table_block(ctx, first_block, i, _("block bitmap"), | ||||
|  					1, &fs->group_desc[i].bg_block_bitmap); | ||||
| @@ -1969,7 +1972,6 @@ static void handle_fs_bad_blocks(e2fsck_
 | ||||
|  					&fs->group_desc[i].bg_inode_table); | ||||
|  			ctx->flags |= E2F_FLAG_RESTART; | ||||
|  		} | ||||
| -		first_block += fs->super->s_blocks_per_group;
 | ||||
|  	} | ||||
|  	ctx->invalid_bitmaps = 0; | ||||
|  } | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/e2fsck/super.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/e2fsck/super.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/e2fsck/super.c
 | ||||
| @@ -569,11 +569,9 @@ void check_super_block(e2fsck_t ctx)
 | ||||
|   | ||||
|  	for (i = 0, gd=fs->group_desc; i < fs->group_desc_count; i++, gd++) { | ||||
|  		pctx.group = i; | ||||
| -		
 | ||||
| -		if (i == fs->group_desc_count - 1)
 | ||||
| -			last_block = sb->s_blocks_count - 1;
 | ||||
| -		else
 | ||||
| -			last_block = first_block + blocks_per_group - 1;
 | ||||
| +
 | ||||
| +		first_block = ext2fs_group_first_block(fs, i);
 | ||||
| +		last_block = ext2fs_group_last_block(fs, i);
 | ||||
|   | ||||
|  		if ((gd->bg_block_bitmap < first_block) || | ||||
|  		    (gd->bg_block_bitmap > last_block)) { | ||||
| @@ -608,7 +606,6 @@ void check_super_block(e2fsck_t ctx)
 | ||||
|  		} | ||||
|  		free_blocks += gd->bg_free_blocks_count; | ||||
|  		free_inodes += gd->bg_free_inodes_count; | ||||
| -		first_block += sb->s_blocks_per_group;
 | ||||
|   | ||||
|  		if ((gd->bg_free_blocks_count > sb->s_blocks_per_group) || | ||||
|  		    (gd->bg_free_inodes_count > sb->s_inodes_per_group) || | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/ext2fs/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/ChangeLog
 | ||||
| @@ -1,5 +1,13 @@
 | ||||
|  2006-08-30  Eric Sandeen <esandeen@redhat.com> | ||||
|   | ||||
| +	* alloc_tables.c (ext2fs_allocate_group_table):
 | ||||
| +	* check_desc.c (ext2fs_check_desc):
 | ||||
| +		Use new inlines to calculate group first & last blocks.
 | ||||
| +	* ext2fs.h:
 | ||||
| +		Create new inlines to calculate first/last group blocks.
 | ||||
| +
 | ||||
| +2006-08-30  Eric Sandeen <esandeen@redhat.com>
 | ||||
| +
 | ||||
|  	* bmove.c (process_block): | ||||
|  	* getsize.c (main): | ||||
|  	* icount.c (ext2fs_create_icount2, insert_icount_el): | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/alloc_tables.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/ext2fs/alloc_tables.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/alloc_tables.c
 | ||||
| @@ -34,12 +34,8 @@ errcode_t ext2fs_allocate_group_table(ex
 | ||||
|  	blk_t		group_blk, start_blk, last_blk, new_blk, blk; | ||||
|  	int		j; | ||||
|   | ||||
| -	group_blk = fs->super->s_first_data_block +
 | ||||
| -		(group * fs->super->s_blocks_per_group);
 | ||||
| -	
 | ||||
| -	last_blk = group_blk + fs->super->s_blocks_per_group;
 | ||||
| -	if (last_blk >= fs->super->s_blocks_count)
 | ||||
| -		last_blk = fs->super->s_blocks_count - 1;
 | ||||
| +	group_blk = ext2fs_group_first_block(fs, group);
 | ||||
| +	last_blk = ext2fs_group_last_block(fs, group);
 | ||||
|   | ||||
|  	if (!bmap) | ||||
|  		bmap = fs->block_map; | ||||
| @@ -54,8 +50,8 @@ errcode_t ext2fs_allocate_group_table(ex
 | ||||
|  			return retval; | ||||
|  		start_blk += fs->inode_blocks_per_group; | ||||
|  		start_blk += ((fs->stride * group) % | ||||
| -			      (last_blk - start_blk));
 | ||||
| -		if (start_blk > last_blk)
 | ||||
| +			      (last_blk - start_blk + 1));
 | ||||
| +		if (start_blk >= last_blk)
 | ||||
|  			start_blk = group_blk; | ||||
|  	} else | ||||
|  		start_blk = group_blk; | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/check_desc.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/ext2fs/check_desc.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/check_desc.c
 | ||||
| @@ -38,11 +38,9 @@ errcode_t ext2fs_check_desc(ext2_filsys 
 | ||||
|  	EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS); | ||||
|   | ||||
|  	for (i = 0; i < fs->group_desc_count; i++) { | ||||
| -		if (i == fs->group_desc_count - 1)
 | ||||
| -			last_block = fs->super->s_blocks_count - 1;
 | ||||
| -		else
 | ||||
| -			last_block = first_block +
 | ||||
| -				     fs->super->s_blocks_per_group - 1;
 | ||||
| +		first_block = ext2fs_group_first_block(fs, i);
 | ||||
| +		last_block = ext2fs_group_last_block(fs, i);
 | ||||
| +
 | ||||
|  		/* | ||||
|  		 * Check to make sure block bitmap for group is | ||||
|  		 * located within the group. | ||||
| @@ -65,8 +63,6 @@ errcode_t ext2fs_check_desc(ext2_filsys 
 | ||||
|  		    ((fs->group_desc[i].bg_inode_table + | ||||
|  		      fs->inode_blocks_per_group) > last_block)) | ||||
|  			return EXT2_ET_GDESC_BAD_INODE_TABLE; | ||||
| -		
 | ||||
| -		first_block += fs->super->s_blocks_per_group;
 | ||||
|  	} | ||||
|  	return 0; | ||||
|  } | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/ext2fs.h
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/ext2fs/ext2fs.h
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/ext2fs.h
 | ||||
| @@ -967,6 +967,8 @@ extern int ext2fs_test_ib_dirty(ext2_fil
 | ||||
|  extern int ext2fs_test_bb_dirty(ext2_filsys fs); | ||||
|  extern int ext2fs_group_of_blk(ext2_filsys fs, blk_t blk); | ||||
|  extern int ext2fs_group_of_ino(ext2_filsys fs, ext2_ino_t ino); | ||||
| +extern blk_t ext2fs_group_first_block(ext2_filsys fs, dgrp_t group);
 | ||||
| +extern blk_t ext2fs_group_last_block(ext2_filsys fs, dgrp_t group);
 | ||||
|  extern blk_t ext2fs_inode_data_blocks(ext2_filsys fs, | ||||
|  				      struct ext2_inode *inode); | ||||
|  extern unsigned int ext2fs_div_ceil(unsigned int a, unsigned int b); | ||||
| @@ -1131,6 +1133,26 @@ _INLINE_ int ext2fs_group_of_ino(ext2_fi
 | ||||
|  	return (ino - 1) / fs->super->s_inodes_per_group; | ||||
|  } | ||||
|   | ||||
| +/*
 | ||||
| + * Return the first block (inclusive) in a group
 | ||||
| + */
 | ||||
| +_INLINE_ blk_t ext2fs_group_first_block(ext2_filsys fs, dgrp_t group)
 | ||||
| +{
 | ||||
| +	return fs->super->s_first_data_block +
 | ||||
| +		(group * fs->super->s_blocks_per_group);
 | ||||
| +}
 | ||||
| +
 | ||||
| +/*
 | ||||
| + * Return the last block (inclusive) in a group
 | ||||
| + */
 | ||||
| +_INLINE_ blk_t ext2fs_group_last_block(ext2_filsys fs, dgrp_t group)
 | ||||
| +{
 | ||||
| +	return (group == fs->group_desc_count - 1 ?
 | ||||
| +		fs->super->s_blocks_count - 1 :
 | ||||
| +		ext2fs_group_first_block(fs, group) +
 | ||||
| +			(fs->super->s_blocks_per_group - 1));
 | ||||
| +}
 | ||||
| +
 | ||||
|  _INLINE_ blk_t ext2fs_inode_data_blocks(ext2_filsys fs, | ||||
|  					struct ext2_inode *inode) | ||||
|  { | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/misc/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/misc/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/misc/ChangeLog
 | ||||
| @@ -1,5 +1,10 @@
 | ||||
|  2006-08-30  Eric Sandeen <esandeen@redhat.com> | ||||
|   | ||||
| +	* dumpe2fs.c (list_desc): Use new inlines to calculate group 
 | ||||
| +		first & last blocks.
 | ||||
| +
 | ||||
| +2006-08-30  Eric Sandeen <esandeen@redhat.com>
 | ||||
| +
 | ||||
|  	* dumpe2fs.c (list_bad_blocks): | ||||
|  	* e2image.c (output_meta_data_blocks, write_raw_image_file): | ||||
|  	* mke2fs.c (test_disk, handle_bad_blocks): Fix printf formats. | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/misc/dumpe2fs.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/misc/dumpe2fs.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/misc/dumpe2fs.c
 | ||||
| @@ -153,13 +153,11 @@ static void list_desc (ext2_filsys fs)
 | ||||
|  	else | ||||
|  		old_desc_blocks = fs->desc_blocks; | ||||
|  	for (i = 0; i < fs->group_desc_count; i++) { | ||||
| +		first_block = ext2fs_group_first_block(fs, i);
 | ||||
| +		last_block = ext2fs_group_last_block(fs, i);
 | ||||
| +
 | ||||
|  		ext2fs_super_and_bgd_loc(fs, i, &super_blk,  | ||||
|  					 &old_desc_blk, &new_desc_blk, 0); | ||||
| -		if (i == fs->group_desc_count - 1)
 | ||||
| -			last_block = fs->super->s_blocks_count - 1;
 | ||||
| -		else
 | ||||
| -			last_block = first_block +
 | ||||
| -				     fs->super->s_blocks_per_group - 1;
 | ||||
|   | ||||
|  		printf (_("Group %lu: (Blocks "), i); | ||||
|  		print_range(first_block, last_block); | ||||
| @@ -226,7 +224,6 @@ static void list_desc (ext2_filsys fs)
 | ||||
|  			fputc('\n', stdout); | ||||
|  			inode_bitmap += fs->super->s_inodes_per_group / 8; | ||||
|  		} | ||||
| -		first_block += fs->super->s_blocks_per_group;
 | ||||
|  	} | ||||
|  } | ||||
|   | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/tests/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/tests/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/tests/ChangeLog
 | ||||
| @@ -1,3 +1,9 @@
 | ||||
| +2006-08-30  Eric Sandeen <esandeen@redhat.com>
 | ||||
| +
 | ||||
| +	* m_raid_opt/expect.1:
 | ||||
| +		Change expected values for last group due to correctly
 | ||||
| +		calculated last block when using strides.
 | ||||
| +
 | ||||
|  2006-05-28  Theodore Tso  <tytso@mit.edu> | ||||
|   | ||||
|  	* test_config: Unset all locale-related environment variables | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/tests/m_raid_opt/expect.1
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/tests/m_raid_opt/expect.1
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/tests/m_raid_opt/expect.1
 | ||||
| @@ -944,8 +944,8 @@ Group 126: (Blocks 129025-130048)
 | ||||
|    Free inodes: 32257-32512 | ||||
|  Group 127: (Blocks 130049-131071) | ||||
|    Group descriptor at 130049 | ||||
| -  Block bitmap at 130744 (+695), Inode bitmap at 130745 (+696)
 | ||||
| +  Block bitmap at 130743 (+694), Inode bitmap at 130744 (+695)
 | ||||
|    Inode table at 130050-130081 (+1) | ||||
|    988 free blocks, 256 free inodes, 0 directories | ||||
| -  Free blocks: 130082-130743, 130746-131071
 | ||||
| +  Free blocks: 130082-130742, 130745-131071
 | ||||
|    Free inodes: 32513-32768 | ||||
| @ -1,319 +0,0 @@ | ||||
| # HG changeset patch | ||||
| # User tytso@mit.edu | ||||
| # Date Tue Sep 12 14:55:22 2006 -0400 | ||||
| # Node ID 90cd01f7fcd6293846f0b3ca6ce2b007e3dd7d51 | ||||
| # parent: cb841a8195a7aa87e8d0c95686291e8fb53358df | ||||
| Fix loops over group descriptors to prevent 2**32-1 block number overflows | ||||
| 
 | ||||
| For loops iterating over all group descriptors, consistently define | ||||
| first_block and last_block in a way that they are inclusive of the | ||||
| range, and do not overflow. | ||||
| 
 | ||||
| Previously on the last block group we did a test of <= first + | ||||
| dec_blocks; this would actually wrap back to 0 for a total block count | ||||
| of 2^32-1 | ||||
| 
 | ||||
| Also add handling of last block group which may be smaller. | ||||
| 
 | ||||
| Signed-off-by: Eric Sandeen <esandeen@redhat.com> | ||||
| 
 | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/e2fsck/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/e2fsck/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/e2fsck/ChangeLog
 | ||||
| @@ -1,3 +1,11 @@
 | ||||
| +2006-08-30  Eric Sandeen <esandeen@redhat.com>
 | ||||
| +
 | ||||
| +	* pass1b.c (check_if_fs_block): Change block group loop to use 
 | ||||
| +		a common pattern of first_block/last_block, etc.
 | ||||
| +	
 | ||||
| +	* super.c (check_super_block): Avoid overflows when iterating over
 | ||||
| +		group descriptors on very large filesystems
 | ||||
| +
 | ||||
|  2006-08-30  Theodore Tso  <tytso@mit.edu> | ||||
|   | ||||
|  	* pass5.c (check_inode_bitmaps, check_inode_end, check_block_end): | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/e2fsck/pass1b.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/e2fsck/pass1b.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/e2fsck/pass1b.c
 | ||||
| @@ -779,16 +779,16 @@ errout:
 | ||||
|  static int check_if_fs_block(e2fsck_t ctx, blk_t test_block) | ||||
|  { | ||||
|  	ext2_filsys fs = ctx->fs; | ||||
| -	blk_t	block;
 | ||||
| +	blk_t	first_block;
 | ||||
|  	dgrp_t	i; | ||||
|  	 | ||||
| -	block = fs->super->s_first_data_block;
 | ||||
| +	first_block = fs->super->s_first_data_block;
 | ||||
|  	for (i = 0; i < fs->group_desc_count; i++) { | ||||
|   | ||||
| -		/* Check superblocks/block group descriptros */
 | ||||
| +		/* Check superblocks/block group descriptors */
 | ||||
|  		if (ext2fs_bg_has_super(fs, i)) { | ||||
| -			if (test_block >= block &&
 | ||||
| -			    (test_block <= block + fs->desc_blocks))
 | ||||
| +			if (test_block >= first_block &&
 | ||||
| +			    (test_block <= first_block + fs->desc_blocks))
 | ||||
|  				return 1; | ||||
|  		} | ||||
|  		 | ||||
| @@ -804,7 +804,7 @@ static int check_if_fs_block(e2fsck_t ct
 | ||||
|  		    (test_block == fs->group_desc[i].bg_inode_bitmap)) | ||||
|  			return 1; | ||||
|  		 | ||||
| -		block += fs->super->s_blocks_per_group;
 | ||||
| +		first_block += fs->super->s_blocks_per_group;
 | ||||
|  	} | ||||
|  	return 0; | ||||
|  } | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/e2fsck/super.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/e2fsck/super.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/e2fsck/super.c
 | ||||
| @@ -566,15 +566,17 @@ void check_super_block(e2fsck_t ctx)
 | ||||
|  	 * Verify the group descriptors.... | ||||
|  	 */ | ||||
|  	first_block =  sb->s_first_data_block; | ||||
| -	last_block = first_block + blocks_per_group;
 | ||||
|   | ||||
|  	for (i = 0, gd=fs->group_desc; i < fs->group_desc_count; i++, gd++) { | ||||
|  		pctx.group = i; | ||||
|  		 | ||||
|  		if (i == fs->group_desc_count - 1) | ||||
| -			last_block = sb->s_blocks_count;
 | ||||
| +			last_block = sb->s_blocks_count - 1;
 | ||||
| +		else
 | ||||
| +			last_block = first_block + blocks_per_group - 1;
 | ||||
| +
 | ||||
|  		if ((gd->bg_block_bitmap < first_block) || | ||||
| -		    (gd->bg_block_bitmap >= last_block)) {
 | ||||
| +		    (gd->bg_block_bitmap > last_block)) {
 | ||||
|  			pctx.blk = gd->bg_block_bitmap; | ||||
|  			if (fix_problem(ctx, PR_0_BB_NOT_GROUP, &pctx)) | ||||
|  				gd->bg_block_bitmap = 0; | ||||
| @@ -584,7 +586,7 @@ void check_super_block(e2fsck_t ctx)
 | ||||
|  			ctx->invalid_bitmaps++; | ||||
|  		} | ||||
|  		if ((gd->bg_inode_bitmap < first_block) || | ||||
| -		    (gd->bg_inode_bitmap >= last_block)) {
 | ||||
| +		    (gd->bg_inode_bitmap > last_block)) {
 | ||||
|  			pctx.blk = gd->bg_inode_bitmap; | ||||
|  			if (fix_problem(ctx, PR_0_IB_NOT_GROUP, &pctx)) | ||||
|  				gd->bg_inode_bitmap = 0; | ||||
| @@ -595,7 +597,7 @@ void check_super_block(e2fsck_t ctx)
 | ||||
|  		} | ||||
|  		if ((gd->bg_inode_table < first_block) || | ||||
|  		    ((gd->bg_inode_table + | ||||
| -		      fs->inode_blocks_per_group - 1) >= last_block)) {
 | ||||
| +		      fs->inode_blocks_per_group - 1) > last_block)) {
 | ||||
|  			pctx.blk = gd->bg_inode_table; | ||||
|  			if (fix_problem(ctx, PR_0_ITABLE_NOT_GROUP, &pctx)) | ||||
|  				gd->bg_inode_table = 0; | ||||
| @@ -607,7 +609,6 @@ void check_super_block(e2fsck_t ctx)
 | ||||
|  		free_blocks += gd->bg_free_blocks_count; | ||||
|  		free_inodes += gd->bg_free_inodes_count; | ||||
|  		first_block += sb->s_blocks_per_group; | ||||
| -		last_block += sb->s_blocks_per_group;
 | ||||
|   | ||||
|  		if ((gd->bg_free_blocks_count > sb->s_blocks_per_group) || | ||||
|  		    (gd->bg_free_inodes_count > sb->s_inodes_per_group) || | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/ext2fs/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/ChangeLog
 | ||||
| @@ -1,3 +1,8 @@
 | ||||
| +2006-08-30  Eric Sandeen <esandeen@redhat.com>
 | ||||
| +
 | ||||
| +	* check_desc.c (ext2fs_check_desc): avoid overflows when iterating
 | ||||
| +		over group descriptors on very large filesystems.
 | ||||
| +
 | ||||
|  2006-08-30  Theodore Tso  <tytso@mit.edu> | ||||
|   | ||||
|  	* bitmaps.c (ext2fs_set_bitmap_padding): Fix potential overflow | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/check_desc.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/ext2fs/check_desc.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/check_desc.c
 | ||||
| @@ -32,37 +32,41 @@
 | ||||
|  errcode_t ext2fs_check_desc(ext2_filsys fs) | ||||
|  { | ||||
|  	dgrp_t i; | ||||
| -	blk_t block = fs->super->s_first_data_block;
 | ||||
| -	blk_t next;
 | ||||
| +	blk_t first_block = fs->super->s_first_data_block;
 | ||||
| +	blk_t last_block;
 | ||||
|   | ||||
|  	EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS); | ||||
|   | ||||
|  	for (i = 0; i < fs->group_desc_count; i++) { | ||||
| -		next = block + fs->super->s_blocks_per_group;
 | ||||
| +		if (i == fs->group_desc_count - 1)
 | ||||
| +			last_block = fs->super->s_blocks_count - 1;
 | ||||
| +		else
 | ||||
| +			last_block = first_block +
 | ||||
| +				     fs->super->s_blocks_per_group - 1;
 | ||||
|  		/* | ||||
|  		 * Check to make sure block bitmap for group is | ||||
|  		 * located within the group. | ||||
|  		 */ | ||||
| -		if (fs->group_desc[i].bg_block_bitmap < block ||
 | ||||
| -		    fs->group_desc[i].bg_block_bitmap >= next)
 | ||||
| +		if (fs->group_desc[i].bg_block_bitmap < first_block ||
 | ||||
| +		    fs->group_desc[i].bg_block_bitmap > last_block)
 | ||||
|  			return EXT2_ET_GDESC_BAD_BLOCK_MAP; | ||||
|  		/* | ||||
|  		 * Check to make sure inode bitmap for group is | ||||
|  		 * located within the group | ||||
|  		 */ | ||||
| -		if (fs->group_desc[i].bg_inode_bitmap < block ||
 | ||||
| -		    fs->group_desc[i].bg_inode_bitmap >= next)
 | ||||
| +		if (fs->group_desc[i].bg_inode_bitmap < first_block ||
 | ||||
| +		    fs->group_desc[i].bg_inode_bitmap > last_block)
 | ||||
|  			return EXT2_ET_GDESC_BAD_INODE_MAP; | ||||
|  		/* | ||||
|  		 * Check to make sure inode table for group is located | ||||
|  		 * within the group | ||||
|  		 */ | ||||
| -		if (fs->group_desc[i].bg_inode_table < block ||
 | ||||
| +		if (fs->group_desc[i].bg_inode_table < first_block ||
 | ||||
|  		    ((fs->group_desc[i].bg_inode_table + | ||||
| -		      fs->inode_blocks_per_group) >= next))
 | ||||
| +		      fs->inode_blocks_per_group) > last_block))
 | ||||
|  			return EXT2_ET_GDESC_BAD_INODE_TABLE; | ||||
|  		 | ||||
| -		block = next;
 | ||||
| +		first_block += fs->super->s_blocks_per_group;
 | ||||
|  	} | ||||
|  	return 0; | ||||
|  } | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/misc/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/misc/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/misc/ChangeLog
 | ||||
| @@ -1,3 +1,12 @@
 | ||||
| +2006-08-30  Eric Sandeen <esandeen@redhat.com>
 | ||||
| +
 | ||||
| +	* dumpe2fs.c (list_desc, mark_table_blocks): Avoid overflows when
 | ||||
| +		iterating over group descriptors on very large
 | ||||
| +		filesystems.
 | ||||
| +	
 | ||||
| +	* e2image.c (mark_table_blocks): Change block group loop to use a
 | ||||
| +		common pattern of first_block/last_block, etc.
 | ||||
| +
 | ||||
|  2006-08-30  Theodore Tso  <tytso@mit.edu> | ||||
|   | ||||
|  	* tune2fs.c (main), mke2fs.c (PRS): Use e2p_percent to properly | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/misc/dumpe2fs.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/misc/dumpe2fs.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/misc/dumpe2fs.c
 | ||||
| @@ -130,7 +130,7 @@ static void list_desc (ext2_filsys fs)
 | ||||
|  { | ||||
|  	unsigned long i; | ||||
|  	long diff; | ||||
| -	blk_t	group_blk, next_blk;
 | ||||
| +	blk_t	first_block, last_block;
 | ||||
|  	blk_t	super_blk, old_desc_blk, new_desc_blk; | ||||
|  	char *block_bitmap=NULL, *inode_bitmap=NULL; | ||||
|  	int inode_blocks_per_group, old_desc_blocks, reserved_gdt; | ||||
| @@ -147,7 +147,7 @@ static void list_desc (ext2_filsys fs)
 | ||||
|  				 EXT2_BLOCK_SIZE(fs->super); | ||||
|  	reserved_gdt = fs->super->s_reserved_gdt_blocks; | ||||
|  	fputc('\n', stdout); | ||||
| -	group_blk = fs->super->s_first_data_block;
 | ||||
| +	first_block = fs->super->s_first_data_block;
 | ||||
|  	if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG) | ||||
|  		old_desc_blocks = fs->super->s_first_meta_bg; | ||||
|  	else | ||||
| @@ -155,11 +155,14 @@ static void list_desc (ext2_filsys fs)
 | ||||
|  	for (i = 0; i < fs->group_desc_count; i++) { | ||||
|  		ext2fs_super_and_bgd_loc(fs, i, &super_blk,  | ||||
|  					 &old_desc_blk, &new_desc_blk, 0); | ||||
| -		next_blk = group_blk + fs->super->s_blocks_per_group;
 | ||||
| -		if (next_blk > fs->super->s_blocks_count)
 | ||||
| -			next_blk = fs->super->s_blocks_count;
 | ||||
| +		if (i == fs->group_desc_count - 1)
 | ||||
| +			last_block = fs->super->s_blocks_count - 1;
 | ||||
| +		else
 | ||||
| +			last_block = first_block +
 | ||||
| +				     fs->super->s_blocks_per_group - 1;
 | ||||
| +
 | ||||
|  		printf (_("Group %lu: (Blocks "), i); | ||||
| -		print_range(group_blk, next_blk - 1);
 | ||||
| +		print_range(first_block, last_block);
 | ||||
|  		fputs(")", stdout); | ||||
|  		print_bg_opts(fs, i); | ||||
|  		has_super = ((i==0) || super_blk); | ||||
| @@ -188,19 +191,19 @@ static void list_desc (ext2_filsys fs)
 | ||||
|  			fputc('\n', stdout); | ||||
|  		fputs(_("  Block bitmap at "), stdout); | ||||
|  		print_number(fs->group_desc[i].bg_block_bitmap); | ||||
| -		diff = fs->group_desc[i].bg_block_bitmap - group_blk;
 | ||||
| +		diff = fs->group_desc[i].bg_block_bitmap - first_block;
 | ||||
|  		if (diff >= 0) | ||||
|  			printf(" (+%ld)", diff); | ||||
|  		fputs(_(", Inode bitmap at "), stdout); | ||||
|  		print_number(fs->group_desc[i].bg_inode_bitmap); | ||||
| -		diff = fs->group_desc[i].bg_inode_bitmap - group_blk;
 | ||||
| +		diff = fs->group_desc[i].bg_inode_bitmap - first_block;
 | ||||
|  		if (diff >= 0) | ||||
|  			printf(" (+%ld)", diff); | ||||
|  		fputs(_("\n  Inode table at "), stdout); | ||||
|  		print_range(fs->group_desc[i].bg_inode_table, | ||||
|  			    fs->group_desc[i].bg_inode_table + | ||||
|  			    inode_blocks_per_group - 1); | ||||
| -		diff = fs->group_desc[i].bg_inode_table - group_blk;
 | ||||
| +		diff = fs->group_desc[i].bg_inode_table - first_block;
 | ||||
|  		if (diff > 0) | ||||
|  			printf(" (+%ld)", diff); | ||||
|  		printf (_("\n  %d free blocks, %d free inodes, " | ||||
| @@ -223,7 +226,7 @@ static void list_desc (ext2_filsys fs)
 | ||||
|  			fputc('\n', stdout); | ||||
|  			inode_bitmap += fs->super->s_inodes_per_group / 8; | ||||
|  		} | ||||
| -		group_blk = next_blk;
 | ||||
| +		first_block += fs->super->s_blocks_per_group;
 | ||||
|  	} | ||||
|  } | ||||
|   | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/misc/e2image.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/misc/e2image.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/misc/e2image.c
 | ||||
| @@ -244,21 +244,21 @@ static int process_file_block(ext2_filsy
 | ||||
|   | ||||
|  static void mark_table_blocks(ext2_filsys fs) | ||||
|  { | ||||
| -	blk_t	block, b;
 | ||||
| +	blk_t	first_block, b;
 | ||||
|  	unsigned int	i,j; | ||||
|  	 | ||||
| -	block = fs->super->s_first_data_block;
 | ||||
| +	first_block = fs->super->s_first_data_block;
 | ||||
|  	/* | ||||
|  	 * Mark primary superblock | ||||
|  	 */ | ||||
| -	ext2fs_mark_block_bitmap(meta_block_map, block);
 | ||||
| +	ext2fs_mark_block_bitmap(meta_block_map, first_block);
 | ||||
|  			 | ||||
|  	/* | ||||
|  	 * Mark the primary superblock descriptors | ||||
|  	 */ | ||||
|  	for (j = 0; j < fs->desc_blocks; j++) { | ||||
|  		ext2fs_mark_block_bitmap(meta_block_map, | ||||
| -			 ext2fs_descriptor_block_loc(fs, block, j));
 | ||||
| +			 ext2fs_descriptor_block_loc(fs, first_block, j));
 | ||||
|  	} | ||||
|   | ||||
|  	for (i = 0; i < fs->group_desc_count; i++) { | ||||
| @@ -287,7 +287,7 @@ static void mark_table_blocks(ext2_filsy
 | ||||
|  			ext2fs_mark_block_bitmap(meta_block_map, | ||||
|  				 fs->group_desc[i].bg_inode_bitmap); | ||||
|  		} | ||||
| -		block += fs->super->s_blocks_per_group;
 | ||||
| +		first_block += fs->super->s_blocks_per_group;
 | ||||
|  	} | ||||
|  } | ||||
|   | ||||
| @ -1,16 +0,0 @@ | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/getsize.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/ext2fs/getsize.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/getsize.c
 | ||||
| @@ -250,6 +250,11 @@ errcode_t ext2fs_get_device_size(const c
 | ||||
|  		if (fstat(fd, &st) == 0) | ||||
|  #endif | ||||
|  			if (S_ISREG(st.st_mode)) { | ||||
| +				if ((sizeof(*retblocks) < sizeof(unsigned long long)) &&
 | ||||
| +				    ((st.st_size / blocksize) > 0xFFFFFFFF)) {
 | ||||
| +					rc = EFBIG;
 | ||||
| +					goto out;
 | ||||
| +				}
 | ||||
|  				*retblocks = st.st_size / blocksize; | ||||
|  				goto out; | ||||
|  			} | ||||
| @ -1,16 +0,0 @@ | ||||
| --- e2fsprogs-1.39/lib/blkid/probe.c.leak	2006-09-05 15:41:13.000000000 -0400
 | ||||
| +++ e2fsprogs-1.39/lib/blkid/probe.c	2006-09-05 15:40:19.000000000 -0400
 | ||||
| @@ -884,7 +884,12 @@
 | ||||
|  	} | ||||
|   | ||||
|  	if (!dev->bid_type) { | ||||
| -		if (probe.fd >= 0) close(probe.fd);
 | ||||
| +		if (probe.fd >= 0)
 | ||||
| +                    close(probe.fd);
 | ||||
| +	        if (probe.sbbuf)
 | ||||
| +		    free(probe.sbbuf);
 | ||||
| +	        if (probe.buf)
 | ||||
| +		    free(probe.buf);
 | ||||
|  		blkid_free_dev(dev); | ||||
|  		return NULL; | ||||
|  	} | ||||
| @ -1,49 +0,0 @@ | ||||
| # HG changeset patch | ||||
| # User tytso@mit.edu | ||||
| # Date 1159151618 14400 | ||||
| # Node ID 6ded68c87fd5e19be3a43ced60477d96b87cbae0 | ||||
| # Parent d39ab0d5fde2da82c7de72a536c9bd635d372836 | ||||
| blkid_devno_to_devname(): Avoid recursive loops due to symlinks in /dev | ||||
| 
 | ||||
| Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> | ||||
| 
 | ||||
| Index: e2fsprogs-1.39-RHEL5/lib/blkid/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-RHEL5.orig/lib/blkid/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-RHEL5/lib/blkid/ChangeLog
 | ||||
| @@ -2,6 +2,11 @@
 | ||||
|   | ||||
|  	* read.c (parse_dev): Fix memory leak on error path. | ||||
|   | ||||
| +2006-09-24  Theodore Tso  <tytso@mit.edu>
 | ||||
| +
 | ||||
| +	* devno.c (scan_dir): Don't follow symlinks when recursively
 | ||||
| +		searching directories under /dev.
 | ||||
| +
 | ||||
|  2006-09-17  Karel Zak  <kzak@redhat.com>  | ||||
|   | ||||
|  	* probe.c (probe_fat): Fix problem with empty FAT label. | ||||
| Index: e2fsprogs-1.39-RHEL5/lib/blkid/devno.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-RHEL5.orig/lib/blkid/devno.c
 | ||||
| +++ e2fsprogs-1.39-RHEL5/lib/blkid/devno.c
 | ||||
| @@ -120,15 +120,16 @@ static void scan_dir(char *dirname, dev_
 | ||||
|  		if (stat(path, &st) < 0) | ||||
|  			continue; | ||||
|   | ||||
| -		if (S_ISDIR(st.st_mode))
 | ||||
| -			add_to_dirlist(path, list);
 | ||||
| -		else if (S_ISBLK(st.st_mode) && st.st_rdev == devno) {
 | ||||
| +		if (S_ISBLK(st.st_mode) && st.st_rdev == devno) {
 | ||||
|  			*devname = blkid_strdup(path); | ||||
|  			DBG(DEBUG_DEVNO, | ||||
|  			    printf("found 0x%llx at %s (%p)\n", devno, | ||||
|  				   path, *devname)); | ||||
|  			break; | ||||
|  		} | ||||
| +		if (S_ISDIR(st.st_mode) && !lstat(path, &st) && 
 | ||||
| +		    S_ISDIR(st.st_mode))
 | ||||
| +			add_to_dirlist(path, list);
 | ||||
|  	} | ||||
|  	closedir(dir); | ||||
|  	return; | ||||
| @ -1,52 +0,0 @@ | ||||
| # HG changeset patch | ||||
| # User tytso@mit.edu | ||||
| # Date 1156885376 14400 | ||||
| # Node ID 78dd5824848b223988f2d8531c7dbbf068bc255e | ||||
| # Parent 712ade33bdf31b709d4796721bfa0f458f858a24 | ||||
| Fix debugfs coredump when lsdel is run without an open filesystem | ||||
| 
 | ||||
| Addresses Debian Bug: #378335 | ||||
| 
 | ||||
| Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> | ||||
| --- a/debugfs/ChangeLog	Sat Aug 19 21:16:17 2006 -0400
 | ||||
| +++ b/debugfs/ChangeLog	Tue Aug 29 17:02:56 2006 -0400
 | ||||
| @@ -28,6 +28,12 @@
 | ||||
|   | ||||
|  	* htree.c (htree_dump_int_node): Fix printf formats. | ||||
|   | ||||
| +2006-08-29  Theodore Tso  <tytso@mit.edu>
 | ||||
| +
 | ||||
| +	* lsdel.c (do_lsdel): Fix core-dumping bug.  Don't depend on
 | ||||
| +		current_fs being non-NULL until after the call to
 | ||||
| +		common_args_process().  (Addresses Debian Bug: #378335)
 | ||||
| +
 | ||||
|  2006-05-29  Theodore Tso  <tytso@mit.edu> | ||||
|   | ||||
|  	* util.c (reset_getopt): In order to support ancient Linux header | ||||
| Index: e2fsprogs-1.39-RHEL5/debugfs/lsdel.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-RHEL5.orig/debugfs/lsdel.c
 | ||||
| +++ e2fsprogs-1.39-RHEL5/debugfs/lsdel.c
 | ||||
| @@ -81,12 +81,13 @@ void do_lsdel(int argc, char **argv)
 | ||||
|  	int			i; | ||||
|   	long			secs = 0; | ||||
|   	char			*tmp; | ||||
| -	time_t			now = current_fs->now ? current_fs->now : time(0);
 | ||||
| +	time_t			now;
 | ||||
|  	FILE			*out; | ||||
|  	 | ||||
|  	if (common_args_process(argc, argv, 1, 2, "ls_deleted_inodes", | ||||
|  				"[secs]", 0)) | ||||
|  		return; | ||||
| +
 | ||||
|  	if (argc > 1) { | ||||
|  		secs = strtol(argv[1],&tmp,0); | ||||
|  		if (*tmp) { | ||||
| @@ -95,6 +96,7 @@ void do_lsdel(int argc, char **argv)
 | ||||
|  		} | ||||
|  	} | ||||
|   | ||||
| +	now = current_fs->now ? current_fs->now : time(0);
 | ||||
|  	max_delarray = 100; | ||||
|  	num_delarray = 0; | ||||
|  	delarray = malloc(max_delarray * sizeof(struct deleted_info)); | ||||
| @ -1,106 +0,0 @@ | ||||
| # HG changeset patch | ||||
| # User tytso@mit.edu | ||||
| # Date Tue Sep 12 14:56:18 2006 -0400 | ||||
| # Node ID 8be686f713b52a3fa0b5dab70980ea3ddbad27b5 | ||||
| # parent: 7e1e8751d2be27716166e88453b52273b7096039 | ||||
| Fix more rounding overflows for filesystems that have 2**32-1 blocks | ||||
| 
 | ||||
| Signed-off-by: Eric Sandeen <esandeen@redhat.com> | ||||
| 
 | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/e2fsck/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/e2fsck/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/e2fsck/ChangeLog
 | ||||
| @@ -1,5 +1,9 @@
 | ||||
|  2006-08-30  Eric Sandeen <esandeen@redhat.com> | ||||
|   | ||||
| +	* pass1.c (handle_bad_fs_blocks): use blk_t, not int for first_block.
 | ||||
| +
 | ||||
| +2006-08-30  Eric Sandeen <esandeen@redhat.com>
 | ||||
| +
 | ||||
|  	* pass1.c (new_table_block, handle_fs_bad_blocks): | ||||
|  	* super.c (check_super_block): | ||||
|  		Use new inlines to calculate group first & last blocks. | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/e2fsck/pass1.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/e2fsck/pass1.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/e2fsck/pass1.c
 | ||||
| @@ -1953,7 +1953,7 @@ static void handle_fs_bad_blocks(e2fsck_
 | ||||
|  { | ||||
|  	ext2_filsys fs = ctx->fs; | ||||
|  	dgrp_t		i; | ||||
| -	int		first_block;
 | ||||
| +	blk_t		first_block;
 | ||||
|   | ||||
|  	for (i = 0; i < fs->group_desc_count; i++) { | ||||
|  		first_block = ext2fs_group_first_block(fs, i); | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/misc/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/misc/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/misc/ChangeLog
 | ||||
| @@ -1,5 +1,9 @@
 | ||||
|  2006-08-30  Eric Sandeen <esandeen@redhat.com> | ||||
|   | ||||
| +	* mke2fs.c (PRS): Avoid overflow in megs calculation.
 | ||||
| +
 | ||||
| +2006-08-30  Eric Sandeen <esandeen@redhat.com>
 | ||||
| +
 | ||||
|  	* dumpe2fs.c (list_desc): Use new inlines to calculate group  | ||||
|  		first & last blocks. | ||||
|   | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/misc/mke2fs.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/misc/mke2fs.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/misc/mke2fs.c
 | ||||
| @@ -1261,7 +1261,7 @@ static void PRS(int argc, char *argv[])
 | ||||
|  	} | ||||
|   | ||||
|  	if (!fs_type) { | ||||
| -		int megs = fs_param.s_blocks_count * 
 | ||||
| +		int megs = (__u64)fs_param.s_blocks_count *
 | ||||
|  			(EXT2_BLOCK_SIZE(&fs_param) / 1024) / 1024; | ||||
|   | ||||
|  		if (megs <= 3) | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/resize/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/resize/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/resize/ChangeLog
 | ||||
| @@ -1,5 +1,11 @@
 | ||||
|  2006-08-30  Eric Sandeen  <esandeen@redhat.com> | ||||
|   | ||||
| +	* online.c (online_resize_fs): use div_ceil for r_frac calculation.
 | ||||
| +	* resize2fs.c (adjust_fs_info): avoid overflow in blk calculation
 | ||||
| +		when figuring new reserved blocks count.
 | ||||
| +
 | ||||
| +2006-08-30  Eric Sandeen  <esandeen@redhat.com>
 | ||||
| +
 | ||||
|  	* resize2fs.c (adjust_fs_info): Disallow > 2^32 indoes at resize time. | ||||
|   | ||||
|  2006-08-30  Eric Sandeen  <esandeen@redhat.com> | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/resize/online.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/resize/online.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/resize/online.c
 | ||||
| @@ -59,8 +59,7 @@ errcode_t online_resize_fs(ext2_filsys f
 | ||||
|  		exit(1); | ||||
|  	} | ||||
|   | ||||
| -	r_frac = ((100 * sb->s_r_blocks_count) + sb->s_blocks_count-1) /
 | ||||
| -		sb->s_blocks_count;
 | ||||
| +	r_frac = ext2fs_div_ceil(100 * sb->s_r_blocks_count, sb->s_blocks_count);
 | ||||
|   | ||||
|  	retval = ext2fs_read_bitmaps(fs); | ||||
|  	if (retval) | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/resize/resize2fs.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/resize/resize2fs.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/resize/resize2fs.c
 | ||||
| @@ -250,7 +250,7 @@ retry:
 | ||||
|  	/* | ||||
|  	 * Adjust the number of reserved blocks | ||||
|  	 */ | ||||
| -	blk = old_fs->super->s_r_blocks_count * 100 /
 | ||||
| +	blk = (__u64)old_fs->super->s_r_blocks_count * 100 /
 | ||||
|  		old_fs->super->s_blocks_count; | ||||
|  	fs->super->s_r_blocks_count = e2p_percent(blk,  | ||||
|  						  fs->super->s_blocks_count); | ||||
| @ -1,173 +0,0 @@ | ||||
| # HG changeset patch | ||||
| # User tytso@mit.edu | ||||
| # Date 1182205610 14400 | ||||
| # Node ID 5c00c21991974cc750efa2474fab484b0a1f1522 | ||||
| # Parent 449d075befe0e4be32cce9d34ca1f03575e292d2 | ||||
| Don't write changes to the backup superblocks by default | ||||
| 
 | ||||
| This patch changes ext2fs_open() to set EXT2_FLAG_MASTER_SB_ONLY by | ||||
| default.  This avoids some problems in e2fsck (reported by Jim Garlick) | ||||
| where a corrupt journal can end up writing the bad superblock to the | ||||
| backups.  In general, only e2fsck (after the filesystem is clean), | ||||
| tune2fs, and resize2fs should change the backup superblocks by default. | ||||
| Most callers of ext2fs_open() should not be touching anything where the | ||||
| backups should be touched.  So let's change the defaults to avoid | ||||
| potential problems. | ||||
| 
 | ||||
| Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> | ||||
| 
 | ||||
| Index: e2fsprogs-1.39-RHEL5/e2fsck/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-RHEL5.orig/e2fsck/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-RHEL5/e2fsck/ChangeLog
 | ||||
| @@ -1,3 +1,10 @@
 | ||||
| +2007-06-18  Theodore Tso  <tytso@mit.edu>
 | ||||
| +
 | ||||
| +	* journal.c (e2fsck_run_ext3_journal), unix.c (main): Explicitly
 | ||||
| +		add the EXT2_FLAG_MASTER_SB_ONLY flag to make sure we
 | ||||
| +		won't write out the backup superblocks until we're sure
 | ||||
| +		that we want write them out.
 | ||||
| +
 | ||||
|  2007-03-28  Theodore Tso  <tytso@mit.edu> | ||||
|   | ||||
|  	* pass1.c (e2fsck_pass1, check_ext_attr),  | ||||
| Index: e2fsprogs-1.39-RHEL5/e2fsck/journal.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-RHEL5.orig/e2fsck/journal.c
 | ||||
| +++ e2fsprogs-1.39-RHEL5/e2fsck/journal.c
 | ||||
| @@ -832,6 +832,7 @@ int e2fsck_run_ext3_journal(e2fsck_t ctx
 | ||||
|  	} | ||||
|  	ctx->fs->priv_data = ctx; | ||||
|  	ctx->fs->now = ctx->now; | ||||
| +	ctx->fs->flags |= EXT2_FLAG_MASTER_SB_ONLY;
 | ||||
|   | ||||
|  	/* Set the superblock flags */ | ||||
|  	e2fsck_clear_recover(ctx, recover_retval); | ||||
| Index: e2fsprogs-1.39-RHEL5/e2fsck/unix.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-RHEL5.orig/e2fsck/unix.c
 | ||||
| +++ e2fsprogs-1.39-RHEL5/e2fsck/unix.c
 | ||||
| @@ -978,6 +978,19 @@ restart:
 | ||||
|  			fix_problem(ctx, PR_0_SB_CORRUPT, &pctx); | ||||
|  		fatal_error(ctx, 0); | ||||
|  	} | ||||
| +	/*
 | ||||
| +	 * We only update the master superblock because (a) paranoia;
 | ||||
| +	 * we don't want to corrupt the backup superblocks, and (b) we
 | ||||
| +	 * don't need to update the mount count and last checked
 | ||||
| +	 * fields in the backup superblock (the kernel doesn't update
 | ||||
| +	 * the backup superblocks anyway).  With newer versions of the
 | ||||
| +	 * library this flag is set by ext2fs_open2(), but we set this
 | ||||
| +	 * here just to be sure.  (No, we don't support e2fsck running
 | ||||
| +	 * with some other libext2fs than the one that it was shipped
 | ||||
| +	 * with, but just in case....)
 | ||||
| +	 */
 | ||||
| +	fs->flags |= EXT2_FLAG_MASTER_SB_ONLY;
 | ||||
| +
 | ||||
|  	ctx->fs = fs; | ||||
|  	fs->priv_data = ctx; | ||||
|  	fs->now = ctx->now; | ||||
| @@ -989,7 +1002,6 @@ restart:
 | ||||
|  	get_newer: | ||||
|  		fatal_error(ctx, _("Get a newer version of e2fsck!")); | ||||
|  	} | ||||
| -
 | ||||
|  	/* | ||||
|  	 * Set the device name, which is used whenever we print error | ||||
|  	 * or informational messages to the user. | ||||
| @@ -1088,15 +1100,6 @@ restart:
 | ||||
|  	    !(ctx->options & E2F_OPT_READONLY)) | ||||
|  		ext2fs_mark_super_dirty(fs); | ||||
|   | ||||
| -	/*
 | ||||
| -	 * We only update the master superblock because (a) paranoia;
 | ||||
| -	 * we don't want to corrupt the backup superblocks, and (b) we
 | ||||
| -	 * don't need to update the mount count and last checked
 | ||||
| -	 * fields in the backup superblock (the kernel doesn't
 | ||||
| -	 * update the backup superblocks anyway).
 | ||||
| -	 */
 | ||||
| -	fs->flags |= EXT2_FLAG_MASTER_SB_ONLY;
 | ||||
| -
 | ||||
|  	ehandler_init(fs->io); | ||||
|   | ||||
|  	if (ctx->superblock) | ||||
| Index: e2fsprogs-1.39-RHEL5/lib/ext2fs/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-RHEL5.orig/lib/ext2fs/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-RHEL5/lib/ext2fs/ChangeLog
 | ||||
| @@ -1,3 +1,10 @@
 | ||||
| +2007-06-12  Theodore Tso  <tytso@mit.edu>
 | ||||
| +
 | ||||
| +	* openfs.c (ext2fs_open2): We now set EXT2_FLAG_MASTER_SB_ONLY
 | ||||
| +		when we open a filesystem.  Applications that want to
 | ||||
| +		write changes to the backup superblocks need to explicitly
 | ||||
| +		clear this flag.
 | ||||
| +
 | ||||
|  2007-03-21  Theodore Tso  <tytso@mit.edu> | ||||
|   | ||||
|  	* imager.c (ext2fs_image_inode_write), inode.c | ||||
| Index: e2fsprogs-1.39-RHEL5/lib/ext2fs/openfs.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-RHEL5.orig/lib/ext2fs/openfs.c
 | ||||
| +++ e2fsprogs-1.39-RHEL5/lib/ext2fs/openfs.c
 | ||||
| @@ -100,6 +100,8 @@ errcode_t ext2fs_open2(const char *name,
 | ||||
|  	memset(fs, 0, sizeof(struct struct_ext2_filsys)); | ||||
|  	fs->magic = EXT2_ET_MAGIC_EXT2FS_FILSYS; | ||||
|  	fs->flags = flags; | ||||
| +	/* don't overwrite sb backups unless flag is explicitly cleared */
 | ||||
| +	fs->flags |= EXT2_FLAG_MASTER_SB_ONLY;
 | ||||
|  	fs->umask = 022; | ||||
|  	retval = ext2fs_get_mem(strlen(name)+1, &fs->device_name); | ||||
|  	if (retval) | ||||
| Index: e2fsprogs-1.39-RHEL5/misc/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-RHEL5.orig/misc/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-RHEL5/misc/ChangeLog
 | ||||
| @@ -1,3 +1,9 @@
 | ||||
| +2007-06-12  Theodore Tso  <tytso@mit.edu>
 | ||||
| +
 | ||||
| +	* tune2fs.c (main): Clear the EXT2_FLAG_MASTER_SB_ONLY flag
 | ||||
| +		because we want tune2fs changes to get written to the
 | ||||
| +		backup blocks.
 | ||||
| +
 | ||||
|  2007-05-31  Theodore Tso  <tytso@mit.edu> | ||||
|   | ||||
|  	* mke2fs.c (parse_extended_opts): Free allocated buf on return | ||||
| Index: e2fsprogs-1.39-RHEL5/misc/tune2fs.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-RHEL5.orig/misc/tune2fs.c
 | ||||
| +++ e2fsprogs-1.39-RHEL5/misc/tune2fs.c
 | ||||
| @@ -781,6 +781,7 @@ int main (int argc, char ** argv)
 | ||||
|  		exit(1); | ||||
|  	} | ||||
|  	sb = fs->super; | ||||
| +	fs->flags &= ~EXT2_FLAG_MASTER_SB_ONLY;
 | ||||
|  	if (print_label) { | ||||
|  		/* For e2label emulation */ | ||||
|  		printf("%.*s\n", (int) sizeof(sb->s_volume_name), | ||||
| Index: e2fsprogs-1.39-RHEL5/resize/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-RHEL5.orig/resize/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-RHEL5/resize/ChangeLog
 | ||||
| @@ -1,3 +1,9 @@
 | ||||
| +2007-06-12  Theodore Tso  <tytso@mit.edu>
 | ||||
| +
 | ||||
| +	* resize2fs.c (resize_fs): Clear the EXT2_FLAG_MASTER_SB_ONLY flag
 | ||||
| +		to make sure the superblock changes are written out to the
 | ||||
| +		backup superblocks.
 | ||||
| +
 | ||||
|  2007-03-18  Theodore Tso  <tytso@mit.edu> | ||||
|   | ||||
|  	* resize2fs.c (check_and_change_inodes): Check to make sure the | ||||
| Index: e2fsprogs-1.39-RHEL5/resize/resize2fs.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-RHEL5.orig/resize/resize2fs.c
 | ||||
| +++ e2fsprogs-1.39-RHEL5/resize/resize2fs.c
 | ||||
| @@ -138,6 +138,7 @@ errcode_t resize_fs(ext2_filsys fs, blk_
 | ||||
|  	if (retval) | ||||
|  		goto errout; | ||||
|   | ||||
| +	rfs->new_fs->flags &= ~EXT2_FLAG_MASTER_SB_ONLY;	
 | ||||
|  	retval = ext2fs_close(rfs->new_fs); | ||||
|  	if (retval) | ||||
|  		goto errout; | ||||
| @ -1,111 +0,0 @@ | ||||
| # HG changeset patch | ||||
| # User tytso@mit.edu | ||||
| # Date 1176573631 14400 | ||||
| # Node ID aa8d65921c8922dfed73dd05027a097cc5946653 | ||||
| # Parent 4b2e34b5f7506f9f74b3fadf79280316d57e47d5 | ||||
| Correct byteswapping for fast symlinks with xattrs | ||||
| 
 | ||||
| Fix a problem byte-swapping fast symlinks inodes that contain extended | ||||
| attributes. | ||||
| 
 | ||||
| Addresses Red Hat Bugzilla: #232663 | ||||
| Addresses LTC Bugzilla: #27634 | ||||
| 
 | ||||
| Signed-off-by: "Bryn M. Reeves" <breeves@redhat.com> | ||||
| Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> | ||||
| 
 | ||||
| Index: e2fsprogs-1.39-RHEL5/e2fsck/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-RHEL5.orig/e2fsck/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-RHEL5/e2fsck/ChangeLog
 | ||||
| @@ -5,6 +5,14 @@
 | ||||
|  		won't write out the backup superblocks until we're sure | ||||
|  		that we want write them out. | ||||
|   | ||||
| +2007-04-14  Theodore Tso  <tytso@mit.edu>
 | ||||
| +
 | ||||
| +	* pass2.c (e2fsck_process_bad_inode): Remove special kludge that
 | ||||
| +		dealt with long symlinks on big endian systems.  It turns
 | ||||
| +		out this was a workaround to a bug described in Red Hat
 | ||||
| +		Bugzilla #232663, with an odd twist.  See comment #12 for
 | ||||
| +		more details.
 | ||||
| +
 | ||||
|  2007-03-28  Theodore Tso  <tytso@mit.edu> | ||||
|   | ||||
|  	* pass1.c (e2fsck_pass1, check_ext_attr),  | ||||
| Index: e2fsprogs-1.39-RHEL5/e2fsck/pass2.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-RHEL5.orig/e2fsck/pass2.c
 | ||||
| +++ e2fsprogs-1.39-RHEL5/e2fsck/pass2.c
 | ||||
| @@ -1187,22 +1187,6 @@ extern int e2fsck_process_bad_inode(e2fs
 | ||||
|  	    !(fs->super->s_feature_compat & EXT2_FEATURE_COMPAT_EXT_ATTR)) { | ||||
|  		if (fix_problem(ctx, PR_2_FILE_ACL_ZERO, &pctx)) { | ||||
|  			inode.i_file_acl = 0; | ||||
| -#ifdef EXT2FS_ENABLE_SWAPFS
 | ||||
| -			/* 
 | ||||
| -			 * This is a special kludge to deal with long
 | ||||
| -			 * symlinks on big endian systems.  i_blocks
 | ||||
| -			 * had already been decremented earlier in
 | ||||
| -			 * pass 1, but since i_file_acl hadn't yet
 | ||||
| -			 * been cleared, ext2fs_read_inode() assumed
 | ||||
| -			 * that the file was short symlink and would
 | ||||
| -			 * not have byte swapped i_block[0].  Hence,
 | ||||
| -			 * we have to byte-swap it here.
 | ||||
| -			 */
 | ||||
| -			if (LINUX_S_ISLNK(inode.i_mode) &&
 | ||||
| -			    (fs->flags & EXT2_FLAG_SWAP_BYTES) &&
 | ||||
| -			    (inode.i_blocks == fs->blocksize >> 9))
 | ||||
| -				inode.i_block[0] = ext2fs_swab32(inode.i_block[0]);
 | ||||
| -#endif
 | ||||
|  			inode_modified++; | ||||
|  		} else | ||||
|  			not_fixed++; | ||||
| Index: e2fsprogs-1.39-RHEL5/lib/ext2fs/swapfs.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-RHEL5.orig/lib/ext2fs/swapfs.c
 | ||||
| +++ e2fsprogs-1.39-RHEL5/lib/ext2fs/swapfs.c
 | ||||
| @@ -124,7 +124,7 @@ void ext2fs_swap_inode_full(ext2_filsys 
 | ||||
|  			    struct ext2_inode_large *f, int hostorder, | ||||
|  			    int bufsize) | ||||
|  { | ||||
| -	unsigned i;
 | ||||
| +	unsigned i, has_data_blocks;
 | ||||
|  	int islnk = 0; | ||||
|  	__u32 *eaf, *eat; | ||||
|   | ||||
| @@ -141,11 +141,17 @@ void ext2fs_swap_inode_full(ext2_filsys 
 | ||||
|  	t->i_dtime = ext2fs_swab32(f->i_dtime); | ||||
|  	t->i_gid = ext2fs_swab16(f->i_gid); | ||||
|  	t->i_links_count = ext2fs_swab16(f->i_links_count); | ||||
| +	if (hostorder)
 | ||||
| +		has_data_blocks = ext2fs_inode_data_blocks(fs,
 | ||||
| +					   (struct ext2_inode *) f);
 | ||||
|  	t->i_blocks = ext2fs_swab32(f->i_blocks); | ||||
| +	if (!hostorder)
 | ||||
| +		has_data_blocks = ext2fs_inode_data_blocks(fs,
 | ||||
| +					   (struct ext2_inode *) t);
 | ||||
|  	t->i_flags = ext2fs_swab32(f->i_flags); | ||||
|  	t->i_file_acl = ext2fs_swab32(f->i_file_acl); | ||||
|  	t->i_dir_acl = ext2fs_swab32(f->i_dir_acl); | ||||
| -	if (!islnk || ext2fs_inode_data_blocks(fs, (struct ext2_inode *)t)) {
 | ||||
| +	if (!islnk || has_data_blocks ) {
 | ||||
|  		for (i = 0; i < EXT2_N_BLOCKS; i++) | ||||
|  			t->i_block[i] = ext2fs_swab32(f->i_block[i]); | ||||
|  	} else if (t != f) { | ||||
| Index: e2fsprogs-1.39-RHEL5/lib/ext2fs/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-RHEL5.orig/lib/ext2fs/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-RHEL5/lib/ext2fs/ChangeLog
 | ||||
| @@ -5,6 +5,12 @@
 | ||||
|  		write changes to the backup superblocks need to explicitly | ||||
|  		clear this flag. | ||||
|   | ||||
| +2007-04-14  Theodore Tso  <tytso@mit.edu>
 | ||||
| +
 | ||||
| +	* swapfs.c (ext2fs_swap_inode_full): Fix a problem byte-swapping
 | ||||
| +		fast symlinks inodes that contain extended attributes.
 | ||||
| +		(Addresses Red Hat Bugzilla #232663, LTC bugzilla #27634)
 | ||||
| +
 | ||||
|  2007-03-21  Theodore Tso  <tytso@mit.edu> | ||||
|   | ||||
|  	* imager.c (ext2fs_image_inode_write), inode.c | ||||
| @ -1,182 +0,0 @@ | ||||
| # HG changeset patch | ||||
| # User tytso@mit.edu | ||||
| # Date Tue Sep 12 14:56:12 2006 -0400 | ||||
| # Node ID 59bf36fb8344bb7a3971af7df22d41f8d8b14610 | ||||
| # parent: 90cd01f7fcd6293846f0b3ca6ce2b007e3dd7d51 | ||||
| Remove unused variables | ||||
| 
 | ||||
| Signed-off-by: Eric Sandeen <esandeen@redhat.com> | ||||
| 
 | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/e2fsck/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/e2fsck/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/e2fsck/ChangeLog
 | ||||
| @@ -1,5 +1,9 @@
 | ||||
|  2006-08-30  Eric Sandeen <esandeen@redhat.com> | ||||
|   | ||||
| +	* pass1.c (handle_fs_bad_blocks): Remove unused variables.
 | ||||
| +
 | ||||
| +2006-08-30  Eric Sandeen <esandeen@redhat.com>
 | ||||
| +
 | ||||
|  	* pass1b.c (check_if_fs_block): Change block group loop to use  | ||||
|  		a common pattern of first_block/last_block, etc. | ||||
|  	 | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/e2fsck/pass1.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/e2fsck/pass1.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/e2fsck/pass1.c
 | ||||
| @@ -1981,14 +1981,13 @@ static void handle_fs_bad_blocks(e2fsck_
 | ||||
|  static void mark_table_blocks(e2fsck_t ctx) | ||||
|  { | ||||
|  	ext2_filsys fs = ctx->fs; | ||||
| -	blk_t	block, b;
 | ||||
| +	blk_t	b;
 | ||||
|  	dgrp_t	i; | ||||
|  	int	j; | ||||
|  	struct problem_context pctx; | ||||
|  	 | ||||
|  	clear_problem_context(&pctx); | ||||
|  	 | ||||
| -	block = fs->super->s_first_data_block;
 | ||||
|  	for (i = 0; i < fs->group_desc_count; i++) { | ||||
|  		pctx.group = i; | ||||
|   | ||||
| @@ -2049,7 +2048,6 @@ static void mark_table_blocks(e2fsck_t c
 | ||||
|  				     fs->group_desc[i].bg_inode_bitmap); | ||||
|  			} | ||||
|  		} | ||||
| -		block += fs->super->s_blocks_per_group;
 | ||||
|  	} | ||||
|  } | ||||
|  	 | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/ext2fs/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/ChangeLog
 | ||||
| @@ -1,5 +1,10 @@
 | ||||
|  2006-08-30  Eric Sandeen <esandeen@redhat.com> | ||||
|   | ||||
| +	* closefs.c (write_backup_super):
 | ||||
| +	* initialize.c (ext2fs_initialize): Remove unused variables.
 | ||||
| +
 | ||||
| +2006-08-30  Eric Sandeen <esandeen@redhat.com>
 | ||||
| +
 | ||||
|  	* check_desc.c (ext2fs_check_desc): avoid overflows when iterating | ||||
|  		over group descriptors on very large filesystems. | ||||
|   | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/closefs.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/ext2fs/closefs.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/closefs.c
 | ||||
| @@ -206,7 +206,6 @@ static errcode_t write_backup_super(ext2
 | ||||
|  errcode_t ext2fs_flush(ext2_filsys fs) | ||||
|  { | ||||
|  	dgrp_t		i,j; | ||||
| -	blk_t		group_block;
 | ||||
|  	errcode_t	retval; | ||||
|  	unsigned long	fs_state; | ||||
|  	struct ext2_super_block *super_shadow = 0; | ||||
| @@ -275,7 +274,6 @@ errcode_t ext2fs_flush(ext2_filsys fs)
 | ||||
|  	 * Write out the master group descriptors, and the backup | ||||
|  	 * superblocks and group descriptors. | ||||
|  	 */ | ||||
| -	group_block = fs->super->s_first_data_block;
 | ||||
|  	group_ptr = (char *) group_shadow; | ||||
|  	if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG) | ||||
|  		old_desc_blocks = fs->super->s_first_meta_bg; | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/initialize.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/lib/ext2fs/initialize.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/lib/ext2fs/initialize.c
 | ||||
| @@ -99,7 +99,6 @@ errcode_t ext2fs_initialize(const char *
 | ||||
|  	int		frags_per_block; | ||||
|  	unsigned int	rem; | ||||
|  	unsigned int	overhead = 0; | ||||
| -	blk_t		group_block;
 | ||||
|  	unsigned int	ipg; | ||||
|  	dgrp_t		i; | ||||
|  	blk_t		numblocks; | ||||
| @@ -360,7 +359,6 @@ retry:
 | ||||
|  	 * inode table have not been allocated (and in fact won't be | ||||
|  	 * by this routine), they are accounted for nevertheless. | ||||
|  	 */ | ||||
| -	group_block = super->s_first_data_block;
 | ||||
|  	super->s_free_blocks_count = 0; | ||||
|  	for (i = 0; i < fs->group_desc_count; i++) { | ||||
|  		numblocks = ext2fs_reserve_super_and_bgd(fs, i, fs->block_map); | ||||
| @@ -370,8 +368,6 @@ retry:
 | ||||
|  		fs->group_desc[i].bg_free_inodes_count = | ||||
|  			fs->super->s_inodes_per_group; | ||||
|  		fs->group_desc[i].bg_used_dirs_count = 0; | ||||
| -		
 | ||||
| -		group_block += super->s_blocks_per_group;
 | ||||
|  	} | ||||
|  	 | ||||
|  	ext2fs_mark_super_dirty(fs); | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/misc/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/misc/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/misc/ChangeLog
 | ||||
| @@ -1,5 +1,10 @@
 | ||||
|  2006-08-30  Eric Sandeen <esandeen@redhat.com> | ||||
|   | ||||
| +	* e2image.c (mark_table_blocks): Remove unused first_block
 | ||||
| +		incrementing from loop.
 | ||||
| +
 | ||||
| +2006-08-30  Eric Sandeen <esandeen@redhat.com>
 | ||||
| +
 | ||||
|  	* dumpe2fs.c (list_desc, mark_table_blocks): Avoid overflows when | ||||
|  		iterating over group descriptors on very large | ||||
|  		filesystems. | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/misc/e2image.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/misc/e2image.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/misc/e2image.c
 | ||||
| @@ -287,7 +287,6 @@ static void mark_table_blocks(ext2_filsy
 | ||||
|  			ext2fs_mark_block_bitmap(meta_block_map, | ||||
|  				 fs->group_desc[i].bg_inode_bitmap); | ||||
|  		} | ||||
| -		first_block += fs->super->s_blocks_per_group;
 | ||||
|  	} | ||||
|  } | ||||
|   | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/resize/ChangeLog
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/resize/ChangeLog
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/resize/ChangeLog
 | ||||
| @@ -1,3 +1,7 @@
 | ||||
| +2006-08-30  Eric Sandeen  <esandeen@redhat.com>
 | ||||
| +
 | ||||
| +	* resize2fs.c (mark_table_blocks): Remove unused variable.
 | ||||
| +
 | ||||
|  2006-08-30  Theodore Tso  <tytso@mit.edu> | ||||
|   | ||||
|  	* resize2fs.c (adjust_fs_info), online.c (online_resize_fs): Use | ||||
| Index: e2fsprogs-1.39-my-patches-from-ted/resize/resize2fs.c
 | ||||
| ===================================================================
 | ||||
| --- e2fsprogs-1.39-my-patches-from-ted.orig/resize/resize2fs.c
 | ||||
| +++ e2fsprogs-1.39-my-patches-from-ted/resize/resize2fs.c
 | ||||
| @@ -536,14 +536,13 @@ errout:
 | ||||
|  static errcode_t mark_table_blocks(ext2_filsys fs, | ||||
|  				   ext2fs_block_bitmap bmap) | ||||
|  { | ||||
| -	blk_t			block, b;
 | ||||
| +	blk_t			b;
 | ||||
|  	unsigned int		j; | ||||
|  	dgrp_t			i; | ||||
|  	unsigned long		meta_bg_size; | ||||
|  	unsigned int		old_desc_blocks; | ||||
|   | ||||
|  	meta_bg_size = (fs->blocksize / sizeof (struct ext2_group_desc)); | ||||
| -	block = fs->super->s_first_data_block;
 | ||||
|  	if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG) | ||||
|  		old_desc_blocks = fs->super->s_first_meta_bg; | ||||
|  	else | ||||
| @@ -571,7 +570,6 @@ static errcode_t mark_table_blocks(ext2_
 | ||||
|  		 */ | ||||
|  		ext2fs_mark_block_bitmap(bmap, | ||||
|  					 fs->group_desc[i].bg_inode_bitmap); | ||||
| -		block += fs->super->s_blocks_per_group;
 | ||||
|  	} | ||||
|  	return 0; | ||||
|  } | ||||
| @ -1,121 +0,0 @@ | ||||
| # HG changeset patch | ||||
| # User tytso@mit.edu | ||||
| # Date Sun Oct 22 00:18:49 2006 -0400 | ||||
| # Node ID 91cc4c459889b6013c832477742dc80274cca2e3 | ||||
| # parent: fa7a505b350d10ab97de18f5caeef0a8493dba94 | ||||
| Add failsafe against duplicate UUID's generated by threaded programs | ||||
| 
 | ||||
| Add in randomness based on Linux's thread id (gettid) to avoid race | ||||
| conditions when two threads try to generate uuid's at the same time. | ||||
| This shouldn't be an issue if /dev/urandom has proper locking and is | ||||
| present, so this is just a failsafe. | ||||
| 
 | ||||
| Addresses SourceForge Bug: #1529672 | ||||
| 
 | ||||
| Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> | ||||
| 
 | ||||
| --- a/ChangeLog	Sun Oct 22 00:14:26 2006 -0400
 | ||||
| +++ b/ChangeLog	Sun Oct 22 00:18:49 2006 -0400
 | ||||
| @@ -0,0 +1,4 @@
 | ||||
| +2006-10-22  Theodore Tso  <tytso@mit.edu>
 | ||||
| +
 | ||||
| +	* configure, configure.in: Add test for jrand48()
 | ||||
| +
 | ||||
| --- a/configure	Sun Oct 22 00:14:26 2006 -0400
 | ||||
| +++ b/configure	Sun Oct 22 00:18:49 2006 -0400
 | ||||
| @@ -16306,7 +16306,8 @@
 | ||||
|   | ||||
|   | ||||
|   | ||||
| -for ac_func in chflags getrusage llseek lseek64 open64 fstat64 getmntinfo strtoull strcasecmp srandom fchown mallinfo fdatasync strnlen strptime sysconf pathconf posix_memalign memalign valloc __secure_getenv prctl
 | ||||
| +
 | ||||
| +for ac_func in chflags getrusage llseek lseek64 open64 fstat64 getmntinfo strtoull strcasecmp srandom jrand48 fchown mallinfo fdatasync strnlen strptime sysconf pathconf posix_memalign memalign valloc __secure_getenv prctl
 | ||||
|  do | ||||
|  as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` | ||||
|  { echo "$as_me:$LINENO: checking for $ac_func" >&5 | ||||
| --- a/configure.in	Sun Oct 22 00:14:26 2006 -0400
 | ||||
| +++ b/configure.in	Sun Oct 22 00:18:49 2006 -0400
 | ||||
| @@ -659,7 +659,7 @@
 | ||||
|  	[#include <sys/types.h> | ||||
|  	 #include <sys/socket.h>]) | ||||
|  dnl | ||||
| -AC_CHECK_FUNCS(chflags getrusage llseek lseek64 open64 fstat64 getmntinfo strtoull strcasecmp srandom fchown mallinfo fdatasync strnlen strptime sysconf pathconf posix_memalign memalign valloc __secure_getenv prctl)
 | ||||
| +AC_CHECK_FUNCS(chflags getrusage llseek lseek64 open64 fstat64 getmntinfo strtoull strcasecmp srandom jrand48 fchown mallinfo fdatasync strnlen strptime sysconf pathconf posix_memalign memalign valloc __secure_getenv prctl)
 | ||||
|  dnl | ||||
|  dnl Check to see if -lsocket is required (solaris) to make something | ||||
|  dnl that uses socket() to compile; this is needed for the UUID library | ||||
| --- a/lib/uuid/ChangeLog	Sun Oct 22 00:14:26 2006 -0400
 | ||||
| +++ b/lib/uuid/ChangeLog	Sun Oct 22 00:18:49 2006 -0400
 | ||||
| @@ -1,3 +1,12 @@
 | ||||
| +2006-10-22  Theodore Tso  <tytso@mit.edu>
 | ||||
| +
 | ||||
| +	* gen_uuid.c (get_random_bytes): Add in randomness based on
 | ||||
| +		Linux's thread id (gettid) to avoid race conditions when
 | ||||
| +		two threads try to generate uuid's at the same time.  This
 | ||||
| +		shouldn't be an issue if /dev/urandom has proper locking
 | ||||
| +		and is present, so this is just a failsafe.  (Addresses
 | ||||
| +		SourceForge Bug: #1529672)
 | ||||
| +
 | ||||
|  2006-01-06  Theodore Ts'o  <tytso@mit.edu> | ||||
|   | ||||
|  	* gen_uuid.c (get_random_fd): Set the FD_CLOEXEC flag on the file | ||||
| --- a/lib/uuid/gen_uuid.c	Sun Oct 22 00:14:26 2006 -0400
 | ||||
| +++ b/lib/uuid/gen_uuid.c	Sun Oct 22 00:18:49 2006 -0400
 | ||||
| @@ -69,12 +69,20 @@
 | ||||
|  #ifdef HAVE_NET_IF_DL_H | ||||
|  #include <net/if_dl.h> | ||||
|  #endif | ||||
| +#ifdef __linux__
 | ||||
| +#include <sys/syscall.h>
 | ||||
| +#endif
 | ||||
|   | ||||
|  #include "uuidP.h" | ||||
|   | ||||
|  #ifdef HAVE_SRANDOM | ||||
|  #define srand(x) 	srandom(x) | ||||
|  #define rand() 		random() | ||||
| +#endif
 | ||||
| +
 | ||||
| +#if defined(__linux__) && defined(__NR_gettid) && defined(HAVE_JRAND48)
 | ||||
| +#define DO_JRAND_MIX
 | ||||
| +static unsigned short jrand_seed[3];
 | ||||
|  #endif | ||||
|   | ||||
|  static int get_random_fd(void) | ||||
| @@ -94,6 +102,11 @@
 | ||||
|  				fcntl(fd, F_SETFD, i | FD_CLOEXEC); | ||||
|  		} | ||||
|  		srand((getpid() << 16) ^ getuid() ^ tv.tv_sec ^ tv.tv_usec); | ||||
| +#ifdef DO_JRAND_MIX
 | ||||
| +		jrand_seed[0] = getpid() ^ (tv.tv_sec & 0xFFFF);
 | ||||
| +		jrand_seed[1] = getppid() ^ (tv.tv_usec & 0xFFFF);
 | ||||
| +		jrand_seed[2] = (tv.tv_sec ^ tv.tv_usec) >> 16;
 | ||||
| +#endif
 | ||||
|  	} | ||||
|  	/* Crank the random number generator a few times */ | ||||
|  	gettimeofday(&tv, 0); | ||||
| @@ -112,6 +125,7 @@
 | ||||
|  	int i, n = nbytes, fd = get_random_fd(); | ||||
|  	int lose_counter = 0; | ||||
|  	unsigned char *cp = (unsigned char *) buf; | ||||
| +	unsigned short tmp_seed[3];
 | ||||
|   | ||||
|  	if (fd >= 0) { | ||||
|  		while (n > 0) { | ||||
| @@ -133,6 +147,15 @@
 | ||||
|  	 */ | ||||
|  	for (cp = buf, i = 0; i < nbytes; i++) | ||||
|  		*cp++ ^= (rand() >> 7) & 0xFF; | ||||
| +#ifdef DO_JRAND_MIX
 | ||||
| +	memcpy(tmp_seed, jrand_seed, sizeof(tmp_seed));
 | ||||
| +	jrand_seed[2] = jrand_seed[2] ^ syscall(__NR_gettid);
 | ||||
| +	for (cp = buf, i = 0; i < nbytes; i++)
 | ||||
| +		*cp++ ^= (jrand48(tmp_seed) >> 7) & 0xFF;
 | ||||
| +	memcpy(jrand_seed, tmp_seed, 
 | ||||
| +	       sizeof(jrand_seed)-sizeof(unsigned short));
 | ||||
| +#endif
 | ||||
| +
 | ||||
|  	return; | ||||
|  } | ||||
|   | ||||
| 
 | ||||
| @ -1,49 +0,0 @@ | ||||
| # HG changeset patch | ||||
| # User tytso@mit.edu | ||||
| # Date 1182493358 14400 | ||||
| # Node ID 702632e66380e459f60b238570edd1e911dd46bc | ||||
| # Parent 17c2ad1542e716779e127b5db35879c391ac6282 | ||||
| e2fsck: added sanity check for xattr validation | ||||
| 
 | ||||
| Add an extra validity test in check_ext_attr().  If an attribute's | ||||
| e_value_size is zero the current code does not allocate a region for it | ||||
| and as a result the e_value_offs value is not verified.  However, if | ||||
| e_value_offs is very large then the later call to | ||||
| ext2fs_ext_attr_hash_entry() can dereference bad memory and crash | ||||
| e2fsck. | ||||
| 
 | ||||
| Signed-off-by: Andreas Dilger <adilger@clusterfs.com> | ||||
| Signed-off-by: Jim Garlick <garlick@llnl.gov> | ||||
| 
 | ||||
| --- a/e2fsck/ChangeLog	Thu Jun 21 13:43:33 2007 -0400
 | ||||
| +++ b/e2fsck/ChangeLog	Fri Jun 22 02:22:38 2007 -0400
 | ||||
| @@ -1,3 +1,13 @@ 2007-06-18  Theodore Tso  <tytso@mit.edu
 | ||||
| +2007-06-22  Theodore Tso  <tytso@mit.edu>
 | ||||
| +
 | ||||
| +	* pass1.c (check_ext_attr): Adds an extra validity test in
 | ||||
| +		check_ext_attr().  If an attribute's e_value_size is zero
 | ||||
| +		the current code does not allocate a region for it and as
 | ||||
| +		a result the e_value_offs value is not verified.  However,
 | ||||
| +		if e_value_offs is very large then the later call to
 | ||||
| +		ext2fs_ext_attr_hash_entry() can dereference bad memory
 | ||||
| +		and crash e2fsck.
 | ||||
| +
 | ||||
|  2007-06-18  Theodore Tso  <tytso@mit.edu> | ||||
|   | ||||
|  	* journal.c (e2fsck_run_ext3_journal), unix.c (main): Explicitly | ||||
| --- a/e2fsck/pass1.c	Thu Jun 21 13:43:33 2007 -0400
 | ||||
| +++ b/e2fsck/pass1.c	Fri Jun 22 02:22:38 2007 -0400
 | ||||
| @@ -1380,6 +1380,11 @@ static int check_ext_attr(e2fsck_t ctx, 
 | ||||
|  			if (fix_problem(ctx, PR_1_EA_BAD_VALUE, pctx)) | ||||
|  				goto clear_extattr; | ||||
|  		} | ||||
| +		if (entry->e_value_offs + entry->e_value_size > fs->blocksize) {
 | ||||
| +			if (fix_problem(ctx, PR_1_EA_BAD_VALUE, pctx))
 | ||||
| +				goto clear_extattr;
 | ||||
| +			break;
 | ||||
| +		}
 | ||||
|  		if (entry->e_value_size && | ||||
|  		    region_allocate(region, entry->e_value_offs, | ||||
|  				    EXT2_EXT_ATTR_SIZE(entry->e_value_size))) { | ||||
| 
 | ||||
| 
 | ||||
| @ -4,7 +4,7 @@ | ||||
| Summary: Utilities for managing the second and third extended (ext2/ext3) filesystems | ||||
| Name: e2fsprogs | ||||
| Version: 1.40.2 | ||||
| Release: 10%{?dist} | ||||
| Release: 11%{?dist} | ||||
| # License based on upstream-modified COPYING file, | ||||
| # which clearly states "V2" intent. | ||||
| License: GPLv2 | ||||
| @ -267,6 +267,9 @@ exit 0 | ||||
| %{_mandir}/man3/uuid_unparse.3* | ||||
| 
 | ||||
| %changelog | ||||
| * Tue Oct 23 2007 Eric Sandeen <esandeen@redhat.com> 1.40.2-11 | ||||
| - Add arm to multilib header wrapper | ||||
| 
 | ||||
| * Sat Oct 20 2007 Eric Sandeen <esandeen@redhat.com> 1.40.2-10 | ||||
| - Make (more) file timestamps match those in tarball for multilib tidiness  | ||||
| - Fix e2fsprogs-libs summary (shared libs not static) | ||||
|  | ||||
| @ -19,6 +19,8 @@ | ||||
| #include "ext2_types-x86_64.h" | ||||
| #elif defined(__alpha__) | ||||
| #include "ext2_types-alpha.h" | ||||
| #elif defined(__arm__) | ||||
| #include "ext2_types-arm.h" | ||||
| #else | ||||
| #error "This e2fsprogs-devel package does not work your architecture?" | ||||
| #endif | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user