Whamcloud - gitweb
e2fsck: fix ASAN error when using 128 byte inodes
authorTheodore Ts'o <tytso@mit.edu>
Sat, 15 Apr 2017 14:33:53 +0000 (10:33 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Fri, 21 Apr 2017 07:33:47 +0000 (03:33 -0400)
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

index 188cc56..7983ffd 100644 (file)
@@ -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);