Re: [syzbot] [udf?] general protection fault in udf_read_folio

From: Edward Adam Davis
Date: Sun Sep 22 2024 - 01:03:17 EST


In erofs_bread(),
folio = read_mapping_folio(buf->mapping, index, NULL);
file is NULL, it triger this issue.

#syz test

diff --git a/fs/udf/inode.c b/fs/udf/inode.c
index 4726a4d014b6..fb8121edee8f 100644
--- a/fs/udf/inode.c
+++ b/fs/udf/inode.c
@@ -220,7 +220,7 @@ static void udf_adinicb_read_folio(struct folio *folio)

static int udf_read_folio(struct file *file, struct folio *folio)
{
- struct udf_inode_info *iinfo = UDF_I(file_inode(file));
+ struct udf_inode_info *iinfo = UDF_I(folio->mapping->host);

if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) {
udf_adinicb_read_folio(folio);