Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 9383e745e23602bc45f9c92184feea59 > files > 82

gfs2-utils-0.1.62-28.el5.src.rpm

commit 93cd1d93eadd44ea67ff4a2e486564c0254a1105
Author: Bob Peterson <rpeterso@redhat.com>
Date:   Sat Jul 18 22:44:31 2009 -0500

    gfs2_edit produces unaligned access
    
    This patch fixes a problem whereby gfs2_edit would give
    "unaligned access" errors on some architectures.
    
    rhbz#503530

diff --git a/gfs2/edit/hexedit.c b/gfs2/edit/hexedit.c
index 38274c2..5937663 100644
--- a/gfs2/edit/hexedit.c
+++ b/gfs2/edit/hexedit.c
@@ -872,9 +872,8 @@ void rgcount(void)
 /* ------------------------------------------------------------------------ */
 uint64_t find_rgrp_block(struct gfs2_inode *di, int rg)
 {
-	char buf[sizeof(struct gfs2_rindex)];
 	int amt;
-	struct gfs2_rindex ri;
+	struct gfs2_rindex buf, ri;
 	uint64_t offset, gfs1_adj = 0;
 
 	offset = rg * risize();
@@ -889,7 +888,7 @@ uint64_t find_rgrp_block(struct gfs2_inode *di, int rg)
 	amt = gfs2_readi(di, (void *)&buf, offset + gfs1_adj, risize());
 	if (!amt) /* end of file */
 		return 0;
-	gfs2_rindex_in(&ri, buf);
+	gfs2_rindex_in(&ri, (void *)&buf);
 	return ri.ri_addr;
 }
 
diff --git a/gfs2/edit/savemeta.c b/gfs2/edit/savemeta.c
index dea57cb..4559f6d 100644
--- a/gfs2/edit/savemeta.c
+++ b/gfs2/edit/savemeta.c
@@ -66,12 +66,13 @@ uint64_t masterblock(const char *fn);
  */
 int get_gfs_struct_info(char *buf, int *block_type, int *struct_len)
 {
-	struct gfs2_meta_header mh;
+	struct gfs2_meta_header mh, mhbuf;
 
 	*block_type = 0;
 	*struct_len = sbd.bsize;
 
-	gfs2_meta_header_in(&mh, buf);
+	memcpy(&mhbuf, buf, sizeof(mhbuf));
+	gfs2_meta_header_in(&mh, (void *)&mhbuf);
 	if (mh.mh_magic != GFS2_MAGIC)
 		return -1;
 
@@ -710,7 +711,10 @@ int restore_data(int fd, int in_fd, int printblocksonly)
 				do_read(in_fd, savedata->buf,
 					savedata->siglen);
 			if (first) {
-				gfs2_sb_in(&sbd.sd_sb, savedata->buf);
+				struct gfs2_sb bufsb;
+
+				memcpy(&bufsb, savedata->buf, sizeof(bufsb));
+				gfs2_sb_in(&sbd.sd_sb, (void *)&bufsb);
 				sbd1 = (struct gfs_sb *)&sbd.sd_sb;
 				if (sbd1->sb_fs_format == GFS_FORMAT_FS &&
 				    sbd1->sb_header.mh_type ==