[Ocfs2-tools-devel] [PATCH] mkfs.ocfs2: Let system_dir_blocks_needed return block num.

Tao Ma tao.ma at oracle.com
Thu Apr 2 15:35:45 PDT 2009


system_dir_blocks_needed is deemed to return block number needed
for system dir. But it return the wrong cluster number. It causes
memory overflow in following case.

mkfs.ocfs2 -b 2048 -C 4096 -N 48 /dev/sdX.
Writing system files: *** glibc detected *** mkfs.ocfs2: double free
or corruption (!prev): 0x081f8000 ***

Signed-off-by: Tao Ma <tao.ma at oracle.com>
Reported-by: Dyno Fu <dyno.fu at oracle.com>
---
 mkfs.ocfs2/mkfs.c |    6 ++----
 1 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/mkfs.ocfs2/mkfs.c b/mkfs.ocfs2/mkfs.c
index 033af88..da343dc 100644
--- a/mkfs.ocfs2/mkfs.c
+++ b/mkfs.ocfs2/mkfs.c
@@ -1882,10 +1882,8 @@ system_dir_blocks_needed(State *s)
 	int each = OCFS2_DIR_REC_LEN(SYSTEM_FILE_NAME_MAX);
 	int entries_per_block = s->blocksize / each;
 
-	bytes_needed = ((sys_blocks_needed(s->initial_slots) +
-			 entries_per_block - 1) / entries_per_block) << s->blocksize_bits;
-
-	return (bytes_needed + s->cluster_size - 1) >> s->cluster_size_bits;
+	return (sys_blocks_needed(s->initial_slots) +
+			entries_per_block - 1) / entries_per_block;
 }
 #if 0
 /* This breaks stuff that depends on volume_size_in_clusters and
-- 
1.6.2.rc2.16.gf474c




More information about the Ocfs2-tools-devel mailing list