fs/ocfs2/aops.c | 1 + 1 file changed, 1 insertion(+)
The reproducer uses FAULT_INJECTION to make memory allocation fail, which
causes __filemap_get_folio() to fail, when initializing w_folios[i] in
ocfs2_grab_folios_for_write(), it only returns an error code and the value
of w_folios[i] is the error code, which causes ocfs2_unlock_and_free_folios()
to recycle the invalid w_folios[i] when releasing folios.
Reported-by: syzbot+c2ea94ae47cd7e3881ec@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=c2ea94ae47cd7e3881ec
Signed-off-by: Lizhi Xu <lizhi.xu@windriver.com>
---
fs/ocfs2/aops.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c
index 40b6bce12951..89aadc6cdd87 100644
--- a/fs/ocfs2/aops.c
+++ b/fs/ocfs2/aops.c
@@ -1071,6 +1071,7 @@ static int ocfs2_grab_folios_for_write(struct address_space *mapping,
if (IS_ERR(wc->w_folios[i])) {
ret = PTR_ERR(wc->w_folios[i]);
mlog_errno(ret);
+ wc->w_folios[i] = NULL;
goto out;
}
}
--
2.43.0
On 2025/6/16 09:31, Lizhi Xu wrote: > The reproducer uses FAULT_INJECTION to make memory allocation fail, which > causes __filemap_get_folio() to fail, when initializing w_folios[i] in > ocfs2_grab_folios_for_write(), it only returns an error code and the value > of w_folios[i] is the error code, which causes ocfs2_unlock_and_free_folios() > to recycle the invalid w_folios[i] when releasing folios. > > Reported-by: syzbot+c2ea94ae47cd7e3881ec@syzkaller.appspotmail.com > Closes: https://syzkaller.appspot.com/bug?extid=c2ea94ae47cd7e3881ec > Signed-off-by: Lizhi Xu <lizhi.xu@windriver.com> Looks good. Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com> > --- > fs/ocfs2/aops.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c > index 40b6bce12951..89aadc6cdd87 100644 > --- a/fs/ocfs2/aops.c > +++ b/fs/ocfs2/aops.c > @@ -1071,6 +1071,7 @@ static int ocfs2_grab_folios_for_write(struct address_space *mapping, > if (IS_ERR(wc->w_folios[i])) { > ret = PTR_ERR(wc->w_folios[i]); > mlog_errno(ret); > + wc->w_folios[i] = NULL; > goto out; > } > }
© 2016 - 2025 Red Hat, Inc.