On 2019-8-19 18:34, Gao Xiang wrote: > As reported by erofs-utils fuzzer, currently, multiref > (ondisk deduplication) hasn't been supported for now, > we should forbid it properly. > > Fixes: 3883a79abd02 ("staging: erofs: introduce VLE decompression support") > Cc: <stable@xxxxxxxxxxxxxxx> # 4.19+ > Signed-off-by: Gao Xiang <gaoxiang25@xxxxxxxxxx> > --- > drivers/staging/erofs/zdata.c | 16 ++++++++++++++-- > 1 file changed, 14 insertions(+), 2 deletions(-) > > diff --git a/drivers/staging/erofs/zdata.c b/drivers/staging/erofs/zdata.c > index aae2f2b8353f..5b6fef5181af 100644 > --- a/drivers/staging/erofs/zdata.c > +++ b/drivers/staging/erofs/zdata.c > @@ -816,8 +816,16 @@ static int z_erofs_decompress_pcluster(struct super_block *sb, > pagenr = z_erofs_onlinepage_index(page); > > DBG_BUGON(pagenr >= nr_pages); > - DBG_BUGON(pages[pagenr]); > > + /* > + * currently EROFS doesn't support multiref(dedup), > + * so here erroring out one multiref page. > + */ > + if (unlikely(pages[pagenr])) { > + DBG_BUGON(1); > + SetPageError(pages[pagenr]); > + z_erofs_onlinepage_endio(pages[pagenr]); Should set err meanwhile? > + } > pages[pagenr] = page; > } > z_erofs_pagevec_ctor_exit(&ctor, true); > @@ -849,7 +857,11 @@ static int z_erofs_decompress_pcluster(struct super_block *sb, > pagenr = z_erofs_onlinepage_index(page); > > DBG_BUGON(pagenr >= nr_pages); > - DBG_BUGON(pages[pagenr]); > + if (unlikely(pages[pagenr])) { > + DBG_BUGON(1); > + SetPageError(pages[pagenr]); > + z_erofs_onlinepage_endio(pages[pagenr]); > + } > pages[pagenr] = page; > > overlapped = true; >