[PATCH] forgotten ->b_data in memcpy() call in ext3/resize.c (oopsable)
authorAl Viro <viro@ftp.linux.org.uk>
Wed, 26 Apr 2006 06:26:09 +0000 (07:26 +0100)
committerLinus Torvalds <torvalds@g5.osdl.org>
Wed, 26 Apr 2006 14:52:21 +0000 (07:52 -0700)
sbi->s_group_desc is an array of pointers to buffer_head.  memcpy() of
buffer size from address of buffer_head is a bad idea - it will generate
junk in any case, may oops if buffer_head is close to the end of slab
page and next page is not mapped and isn't what was intended there.
IOW, ->b_data is missing in that call.  Fortunately, result doesn't go
into the primary on-disk data structures, so only backup ones get crap
written to them; that had allowed this bug to remain unnoticed until
now.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
fs/ext3/resize.c

index c5ffa852396802d2f58cfae2474f500c4aeb002f..8aac5334680d18603b987cd1afb759d1b59cf574 100644 (file)
@@ -213,7 +213,7 @@ static int setup_new_group_blocks(struct super_block *sb,
                        goto exit_bh;
                }
                lock_buffer(bh);
-               memcpy(gdb->b_data, sbi->s_group_desc[i], bh->b_size);
+               memcpy(gdb->b_data, sbi->s_group_desc[i]->b_data, bh->b_size);
                set_buffer_uptodate(gdb);
                unlock_buffer(bh);
                ext3_journal_dirty_metadata(handle, gdb);