linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] staging: erofs: fix an error handling in erofs_readdir()
@ 2019-08-18  1:48 Gao Xiang
  2019-08-18  1:56 ` [PATCH v2] " Gao Xiang
  0 siblings, 1 reply; 25+ messages in thread
From: Gao Xiang @ 2019-08-18  1:48 UTC (permalink / raw)
  To: Chao Yu, Richard Weinberger, Greg Kroah-Hartman, devel, linux-fsdevel
  Cc: LKML, linux-erofs, Chao Yu, Miao Xie, Fang Wei, Gao Xiang, stable

From: Gao Xiang <gaoxiang25@huawei.com>

Richard observed a forever loop of erofs_read_raw_page() [1]
which can be generated by forcely setting ->u.i_blkaddr
to 0xdeadbeef (as my understanding block layer can
handle access beyond end of device correctly).

After digging into that, it seems the problem is highly
related with directories and then I found the root cause
is an improper error handling in erofs_readdir().

Let's fix it now.

[1] https://lore.kernel.org/r/1746679415.68815.1566076790942.JavaMail.zimbra@nod.at/

Reported-by: Richard Weinberger <richard@nod.at>
Fixes: 3aa8ec716e52 ("staging: erofs: add directory operations")
Cc: <stable@vger.kernel.org> # 4.19+
Signed-off-by: Gao Xiang <gaoxiang25@huawei.com>
---

Which is based on the following patch as well
https://lore.kernel.org/r/20190816071142.8633-1-gaoxiang25@huawei.com/

and
https://lore.kernel.org/r/20190817082313.21040-1-hsiangkao@aol.com/
can still be properly applied after this patch.

 drivers/staging/erofs/dir.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/erofs/dir.c b/drivers/staging/erofs/dir.c
index 5f38382637e6..f2d7539589e4 100644
--- a/drivers/staging/erofs/dir.c
+++ b/drivers/staging/erofs/dir.c
@@ -82,8 +82,12 @@ static int erofs_readdir(struct file *f, struct dir_context *ctx)
 		unsigned int nameoff, maxsize;
 
 		dentry_page = read_mapping_page(mapping, i, NULL);
-		if (IS_ERR(dentry_page))
-			continue;
+		if (IS_ERR(dentry_page)) {
+			errln("fail to readdir of logical block %u of nid %llu",
+			      i, EROFS_V(dir)->nid);
+			err = PTR_ERR(dentry_page);
+			break;
+		}
 
 		de = (struct erofs_dirent *)kmap(dentry_page);
 
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 25+ messages in thread

end of thread, other threads:[~2019-08-20  7:17 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-18  1:48 [PATCH] staging: erofs: fix an error handling in erofs_readdir() Gao Xiang
2019-08-18  1:56 ` [PATCH v2] " Gao Xiang
2019-08-18  2:20   ` Matthew Wilcox
2019-08-18  2:32     ` Gao Xiang
2019-08-18  2:53       ` Matthew Wilcox
2019-08-18  3:01         ` Gao Xiang
2019-08-18  3:18           ` [PATCH] " Gao Xiang
2019-08-18 12:07             ` kbuild test robot
2019-08-18 13:17             ` kbuild test robot
2019-08-18 13:25               ` Gao Xiang
2019-08-20  6:50                 ` Philip Li
2019-08-20  6:50                   ` Gao Xiang
2019-08-20  6:58                     ` Li, Philip
2019-08-20  7:16                       ` Gao Xiang
2019-08-18  3:21           ` [PATCH v3 RESEND] " Gao Xiang
2019-08-18  8:33             ` Richard Weinberger
2019-08-18  9:10               ` Gao Xiang
2019-08-18  9:18                 ` [PATCH v3 RESEND] staging: erofs: fix an error handling in erofs_readdir()y Gao Xiang
2019-08-18 12:29             ` [PATCH v3 RESEND] staging: erofs: fix an error handling in erofs_readdir() Chao Yu
2019-08-18 12:33             ` Matthew Wilcox
2019-08-18 12:38               ` Gao Xiang
2019-08-18 12:54                 ` [PATCH v4] " Gao Xiang
2019-08-18 10:39         ` [PATCH v2] " Chao Yu
2019-08-18 10:52           ` Gao Xiang
2019-08-18 12:28             ` Chao Yu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).