diff options
author | Theodore Ts'o <tytso@mit.edu> | 2009-02-17 10:58:44 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-02-20 14:37:21 -0800 |
commit | 06331d79061a3fb0cc63a2e06c183a9c820c85b4 (patch) | |
tree | a1523c8c97336d5796bb147087fae49b680e81e9 | |
parent | c8b4b2de0fef78500097afb2a114fb632d2951ab (diff) |
ext4: Initialize the new group descriptor when resizing the filesystem
(cherry picked from commit fdff73f094e7220602cc3f8959c7230517976412)
Make sure all of the fields of the group descriptor are properly
initialized. Previously, we allowed bg_flags field to be contain
random garbage, which could trigger non-deterministic behavior,
including a kernel OOPS.
http://bugzilla.kernel.org/show_bug.cgi?id=12433
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r-- | fs/ext4/resize.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c index cfb8e366e229..00704312f4f7 100644 --- a/fs/ext4/resize.c +++ b/fs/ext4/resize.c @@ -860,11 +860,13 @@ int ext4_group_add(struct super_block *sb, struct ext4_new_group_data *input) gdp = (struct ext4_group_desc *)((char *)primary->b_data + gdb_off * EXT4_DESC_SIZE(sb)); + memset(gdp, 0, EXT4_DESC_SIZE(sb)); ext4_block_bitmap_set(sb, gdp, input->block_bitmap); /* LV FIXME */ ext4_inode_bitmap_set(sb, gdp, input->inode_bitmap); /* LV FIXME */ ext4_inode_table_set(sb, gdp, input->inode_table); /* LV FIXME */ gdp->bg_free_blocks_count = cpu_to_le16(input->free_blocks_count); gdp->bg_free_inodes_count = cpu_to_le16(EXT4_INODES_PER_GROUP(sb)); + gdp->bg_flags = cpu_to_le16(EXT4_BG_INODE_ZEROED); gdp->bg_checksum = ext4_group_desc_csum(sbi, input->group, gdp); /* |