Skip to content

Commit

Permalink
staging: erofs: some compressed cluster should be submitted for corru…
Browse files Browse the repository at this point in the history
…pted images

commit ee45197 upstream.

As reported by erofs_utils fuzzer, a logical page can belong
to at most 2 compressed clusters, if one compressed cluster
is corrupted, but the other has been ready in submitting chain.

The chain needs to submit anyway in order to keep the page
working properly (page unlocked with PG_error set, PG_uptodate
not set).

Let's fix it now.

Fixes: 3883a79 ("staging: erofs: introduce VLE decompression support")
Cc: <stable@vger.kernel.org> # 4.19+
Signed-off-by: Gao Xiang <gaoxiang25@huawei.com>
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Link: https://lore.kernel.org/r/20190819103426.87579-2-gaoxiang25@huawei.com
[ Gao Xiang: Manually backport to v5.3.y stable. ]
Signed-off-by: Gao Xiang <gaoxiang25@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Gao Xiang authored and Greg Kroah-Hartman committed Oct 11, 2019
1 parent d0be5f7 commit f59a603
Showing 1 changed file with 5 additions and 6 deletions.
11 changes: 5 additions & 6 deletions drivers/staging/erofs/unzip_vle.c
Original file line number Diff line number Diff line change
Expand Up @@ -1498,19 +1498,18 @@ static int z_erofs_vle_normalaccess_readpage(struct file *file,
err = z_erofs_do_read_page(&f, page, &pagepool);
(void)z_erofs_vle_work_iter_end(&f.builder);

if (err) {
/* if some compressed cluster ready, need submit them anyway */
z_erofs_submit_and_unzip(&f, &pagepool, true);

if (err)
errln("%s, failed to read, err [%d]", __func__, err);
goto out;
}

z_erofs_submit_and_unzip(&f, &pagepool, true);
out:
if (f.map.mpage)
put_page(f.map.mpage);

/* clean up the remaining free pages */
put_pages_list(&pagepool);
return 0;
return err;
}

static int z_erofs_vle_normalaccess_readpages(struct file *filp,
Expand Down

0 comments on commit f59a603

Please sign in to comment.