diff --git a/fs/squashfs/inode.c b/fs/squashfs/inode.c index 95a9ff9e23997569d4f53810cc977764bfa46e24..3cc84b5376a7b7625a82a49a7f73f0c60b5df87a 100644 --- a/fs/squashfs/inode.c +++ b/fs/squashfs/inode.c @@ -200,6 +200,10 @@ int squashfs_read_inode(struct inode *inode, long long ino) xattr_id = le32_to_cpu(sqsh_ino->xattr); set_nlink(inode, le32_to_cpu(sqsh_ino->nlink)); inode->i_size = le64_to_cpu(sqsh_ino->file_size); + if (inode->i_size < 0) { + err = -EINVAL; + goto failed_read; + } inode->i_op = &squashfs_inode_ops; inode->i_fop = &generic_ro_fops; inode->i_mode |= S_IFREG;