@@ -1822,9 +1822,14 @@ void e2fsck_pass1(e2fsck_t ctx)
inode->i_block[EXT2_DIND_BLOCK] ||
inode->i_block[EXT2_TIND_BLOCK] ||
ext2fs_file_acl_block(fs, inode))) {
+ struct ext2_inode_large *ip;
+
inodes_to_process[process_inode_count].ino = ino;
- inodes_to_process[process_inode_count].inode =
- *(struct ext2_inode_large *)inode;
+ ip = &inodes_to_process[process_inode_count].inode;
+ if (inode_size < sizeof(struct ext2_inode_large))
+ memcpy(ip, inode, inode_size);
+ else
+ memcpy(ip, inode, sizeof(*ip));
process_inode_count++;
} else
check_blocks(ctx, &pctx, block_buf);
Due to the inode table buffering, it's actually hard to overrun the end of allocated memory, so the ASAN error doesn't trigger all the time. Google-Bug-Id: 37326362 Signed-off-by: Theodore Ts'o <tytso@mit.edu> --- e2fsck/pass1.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)