diff --git a/fs/ext4/dir.c b/fs/ext4/dir.c index d4164c507a90..38dca5f773ae 100644 --- a/fs/ext4/dir.c +++ b/fs/ext4/dir.c @@ -258,6 +258,9 @@ static int ext4_readdir(struct file *file, struct dir_context *ctx) while (ctx->pos < inode->i_size && offset < sb->s_blocksize) { + /* Bail out on invalid offset */ + if (offset + sizeof(struct ext4_dir_entry_2) > bh->b_size) + break; de = (struct ext4_dir_entry_2 *) (bh->b_data + offset); if (ext4_check_dir_entry(inode, file, de, bh, bh->b_data, bh->b_size,