lkml.org 
[lkml]   [2023]   [Nov]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    SubjectRe: [syzbot] [PATCH] Test oob in squashfs readahead
    From
    For archival purposes, forwarding an incoming command email to
    linux-kernel@vger.kernel.org.

    ***

    Subject: [PATCH] Test oob in squashfs readahead
    Author: eadavis@qq.com

    please test squashfs readahead oob

    #syz test https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 13d88ac54ddd

    diff --git a/fs/squashfs/block.c b/fs/squashfs/block.c
    index 581ce9519339..ba4f53c3725d 100644
    --- a/fs/squashfs/block.c
    +++ b/fs/squashfs/block.c
    @@ -321,11 +321,16 @@ int squashfs_read_data(struct super_block *sb, u64 index, int length,
    TRACE("Block @ 0x%llx, %scompressed size %d\n", index - 2,
    compressed ? "" : "un", length);
    }
    - if (length < 0 || length > output->length ||
    - (index + length) > msblk->bytes_used) {
    +
    + if (length < 0) {
    res = -EIO;
    goto out;
    }
    + if (length > output->length || (index + length) > msblk->bytes_used) {
    + printk("srd: l:%d, ol: %d, bu: %d,i:%d, c:%d \n", length,
    + output->length, msblk->bytes_used, index, compressed);
    + length = min_t(int, msblk->bytes_used - index, output->length);
    + }

    if (next_index)
    *next_index = index + length;
    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..f3b0111e6fbd 100644
    --- a/fs/squashfs/inode.c
    +++ b/fs/squashfs/inode.c
    @@ -175,6 +175,7 @@ int squashfs_read_inode(struct inode *inode, long long ino)
    u64 frag_blk;
    struct squashfs_lreg_inode *sqsh_ino = &squashfs_ino.lreg;

    + printk("in0: %p, fs: %d, it: %d, %s\n", inode, inode->i_size, type, __func__);
    err = squashfs_read_metadata(sb, sqsh_ino, &block, &offset,
    sizeof(*sqsh_ino));
    if (err < 0)
    @@ -403,6 +404,7 @@ 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:
    \
     
     \ /
      Last update: 2023-11-20 13:58    [W:3.947 / U:0.944 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site