diff --git a/fs/squashfs/file.c b/fs/squashfs/file.c index 8ba8c4c50770..b54d6b993357 100644 --- a/fs/squashfs/file.c +++ b/fs/squashfs/file.c @@ -461,6 +461,12 @@ static int squashfs_read_folio(struct file *file, struct folio *folio) TRACE("Entered squashfs_readpage, page index %lx, start block %llx\n", page->index, squashfs_i(inode)->start); + if (!file_end) { + printk("i:%p, is:%d, %s\n", inode, i_size_read(inode), __func__); + res = -EINVAL; + goto out; + } + if (page->index >= ((i_size_read(inode) + PAGE_SIZE - 1) >> PAGE_SHIFT)) goto out; @@ -547,6 +553,11 @@ static void squashfs_readahead(struct readahead_control *ractl) int i, file_end = i_size_read(inode) >> msblk->block_log; unsigned int max_pages = 1UL << shift; + if (!file_end && !start) { + printk("i:%p, is:%d, %s\n", inode, i_size_read(inode), __func__); + return; + } + readahead_expand(ractl, start, (len | mask) + 1); pages = kmalloc_array(max_pages, sizeof(void *), GFP_KERNEL); diff --git a/fs/squashfs/inode.c b/fs/squashfs/inode.c index aa3411354e66..e7c2ccd6a382 100644 --- a/fs/squashfs/inode.c +++ b/fs/squashfs/inode.c @@ -403,9 +403,11 @@ int squashfs_read_inode(struct inode *inode, long long ino) } else squashfs_i(inode)->xattr_count = 0; + printk("in: %p, fs: %d, it: %d, %s\n", inode, inode->i_size, type, __func__); return 0; failed_read: + printk("in: %p, fs: %d, it: %d, %s\n", inode, inode->i_size, type, __func__); ERROR("Unable to read inode 0x%llx\n", ino); return err; }