lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:	Thu, 24 Sep 2009 21:28:59 -0500
From:	Eric Sandeen <sandeen@...hat.com>
To:	ext4 development <linux-ext4@...r.kernel.org>
Subject: [PATCH 1/2] pu branch: fix more direct fs->group_desc accesses

This fixes still more direct accesses to fs->group_desc
fields off a normal array index (group_desc[i]).  Since
we have variable sized group_desc depending on the group_desc
size, these all must go through accessor functions.

Signed-off-by: Eric Sandeen <sandeen@...hat.com>
---

diff --git a/debugfs/set_fields.c b/debugfs/set_fields.c
index 7ba7782..88cf411 100644
--- a/debugfs/set_fields.c
+++ b/debugfs/set_fields.c
@@ -415,7 +415,10 @@ static errcode_t parse_gd_csum(struct field_set_info *info, char *arg)
 
 	if (strcmp(arg, "calc") == 0) {
 		ext2fs_group_desc_csum_set(current_fs, set_bg);
-		set_gd = current_fs->group_desc[set_bg];
+		memcpy(&set_gd, ext2fs_group_desc(current_fs,
+					current_fs->group_desc,
+					set_bg),
+			sizeof(set_gd));
 		printf("Checksum set to 0x%04x\n",
 		       ext2fs_bg_checksum(current_fs, set_bg));
 		return 0;
@@ -570,10 +573,14 @@ void do_set_block_group_descriptor(int argc, char *argv[])
 		return;
 	}
 
-	set_gd = current_fs->group_desc[set_bg];
+	memcpy(&set_gd, ext2fs_group_desc(current_fs,
+				current_fs->group_desc, set_bg),
+		sizeof(set_gd));
 
 	if (ss->func(ss, argv[3]) == 0) {
-		current_fs->group_desc[set_bg] = set_gd;
+		memcpy(ext2fs_group_desc(current_fs,
+				current_fs->group_desc, set_bg),
+		       &set_gd, sizeof(set_gd));
 		ext2fs_mark_super_dirty(current_fs);
 	}
 }
diff --git a/lib/ext2fs/closefs.c b/lib/ext2fs/closefs.c
index cc3a884..a04d560 100644
--- a/lib/ext2fs/closefs.c
+++ b/lib/ext2fs/closefs.c
@@ -303,7 +303,7 @@ errcode_t ext2fs_flush(ext2_filsys fs)
 	}
 #else
 	super_shadow = fs->super;
-	group_shadow = fs->group_desc;
+	group_shadow = ext2fs_group_desc(fs, fs->group_desc, 0);
 #endif
 
 	/*
diff --git a/lib/ext2fs/csum.c b/lib/ext2fs/csum.c
index a6661b7..b99be26 100644
--- a/lib/ext2fs/csum.c
+++ b/lib/ext2fs/csum.c
@@ -204,9 +204,9 @@ int main(int argc, char **argv)
 		ext2fs_block_bitmap_loc_set(fs, i, 124);
 		ext2fs_inode_bitmap_loc_set(fs, i, 125);
 		ext2fs_inode_table_loc_set(fs, i, 126);
-		fs->group_desc[i].bg_free_blocks_count = 31119;
-		fs->group_desc[i].bg_free_inodes_count = 15701;
-		fs->group_desc[i].bg_used_dirs_count = 2;
+		ext2fs_bg_free_blocks_count_set(fs, i, 31119);
+		ext2fs_bg_free_inodes_count_set(fs, i, 15701);
+		ext2fs_bg_used_dirs_count_set(fs, i, 2);
 		ext2fs_bg_flags_zap(fs, i);
 	};
 
@@ -249,7 +249,7 @@ int main(int argc, char **argv)
 	csum1 = ext2fs_group_desc_csum(fs, 0);
 	ext2fs_bg_checksum_set(fs, 0, csum1);
 	print_csum("csum_new", fs, 0);
-	fs->group_desc[0].bg_free_blocks_count = 1;
+	ext2fs_bg_free_blocks_count_set(fs, 0, 1);
 	csum2 = ext2fs_group_desc_csum(fs, 0);
 	print_csum("csum_blk", fs, 0);
 	if (csum1 == csum2) {
diff --git a/misc/tune2fs.c b/misc/tune2fs.c
index c81f625..dea3366 100644
--- a/misc/tune2fs.c
+++ b/misc/tune2fs.c
@@ -1021,9 +1021,9 @@ static int ext2fs_is_meta_block(ext2_filsys fs, blk_t blk)
 {
 	dgrp_t group;
 	group = ext2fs_group_of_blk(fs, blk);
-	if (fs->group_desc[group].bg_block_bitmap == blk)
+	if (ext2fs_block_bitmap_loc(fs, group) == blk)
 		return 1;
-	if (fs->group_desc[group].bg_inode_bitmap == blk)
+	if (ext2fs_inode_bitmap_loc(fs, group) == blk)
 		return 1;
 	return 0;
 }
@@ -1233,20 +1233,20 @@ static int group_desc_scan_and_fix(ext2_filsys fs, ext2fs_block_bitmap bmap)
 	blk_t blk, new_blk;
 
 	for (i = 0; i < fs->group_desc_count; i++) {
-		blk = fs->group_desc[i].bg_block_bitmap;
+		blk = ext2fs_block_bitmap_loc(fs, i);
 		if (ext2fs_test_block_bitmap2(bmap, blk)) {
 			new_blk = translate_block(blk);
 			if (!new_blk)
 				continue;
-			fs->group_desc[i].bg_block_bitmap = new_blk;
+			ext2fs_block_bitmap_loc_set(fs, i, new_blk);
 		}
 
-		blk = fs->group_desc[i].bg_inode_bitmap;
+		blk = ext2fs_inode_bitmap_loc(fs, i);
 		if (ext2fs_test_block_bitmap2(bmap, blk)) {
 			new_blk = translate_block(blk);
 			if (!new_blk)
 				continue;
-			fs->group_desc[i].bg_inode_bitmap = new_blk;
+			ext2fs_inode_bitmap_loc_set(fs, i, new_blk);
 		}
 	}
 	return 0;
diff --git a/resize/resize2fs.c b/resize/resize2fs.c
index 9a70b27..0d3f05f 100644
--- a/resize/resize2fs.c
+++ b/resize/resize2fs.c
@@ -438,7 +438,8 @@ retry:
 		for (i = fs->group_desc_count;
 		     i < old_fs->group_desc_count; i++) {
 			free_gdp_blocks(fs, reserve_blocks,
-					&old_fs->group_desc[i]);
+					ext2fs_group_desc(old_fs,
+						old_fs->group_desc, i));
 		}
 		retval = 0;
 		goto errout;

--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ