FAILED: patch "[PATCH] staging: erofs: detect potential multiref due to corrupted" failed to apply to 5.2-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.2-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From e12a0ce2fa69798194f3a8628baf6edfbd5c548f Mon Sep 17 00:00:00 2001
From: Gao Xiang <[email protected]>
Date: Wed, 21 Aug 2019 22:01:52 +0800
Subject: [PATCH] staging: erofs: detect potential multiref due to corrupted
images
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 <[email protected]> # 4.19+
Signed-off-by Gao Xiang <[email protected]>
Reviewed-by Chao Yu <[email protected]>
Signed-off-by Greg Kroah-Hartman <[email protected]>
drivers/staging/erofs/zdata.c +17 -3
@@ -798,6 +798,7 @@ static int z_erofs_decompress_pcluster(struct super_block *sb,for (i =0 ; i < nr_pages; ++i) pages[i] =NULL ; + err =0 ;z_erofs_pagevec_ctor_init (&ctor,Z_EROFS_NR_INLINE_PAGEVECS , cl->pagevec,0 );
@@ -819,8 +820,17 @@ 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]); + err = -EFSCORRUPTED ; + } pages[pagenr] = page; }z_erofs_pagevec_ctor_exit (&ctor, true);
@@ -828,7 +838,6 @@ static int z_erofs_decompress_pcluster(struct super_block *sb, overlapped = false; compressed_pages = pcl->compressed_pages; - err =0 ;for (i =0 ; i < clusterpages; ++i) {unsigned int pagenr;
@@ -852,7 +861,12 @@ 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]); + err = -EFSCORRUPTED ; + } pages[pagenr] = page; overlapped = true;