From e251f3585902919e809414a4bd17d6bfdbdaaad1 Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Sat, 15 Apr 2017 10:33:53 -0400 Subject: [PATCH] e2fsck: fix ASAN error when using 128 byte inodes 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 --- e2fsck/pass1.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/e2fsck/pass1.c b/e2fsck/pass1.c index 188cc56..7983ffd 100644 --- a/e2fsck/pass1.c +++ b/e2fsck/pass1.c @@ -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); -- 1.8.3.1