Re: [syzbot] [exfat?] kernel BUG in iov_iter_revert

From: Edward Adam Davis
Date: Fri Jan 19 2024 - 00:57:10 EST


please test kernel BUG in iov_iter_revert

#syz test https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 052d534373b7

diff --git a/fs/exfat/inode.c b/fs/exfat/inode.c
index 522edcbb2ce4..af8870145f67 100644
--- a/fs/exfat/inode.c
+++ b/fs/exfat/inode.c
@@ -534,7 +534,8 @@ static ssize_t exfat_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
size = pos + ret;

/* zero the unwritten part in the partially written block */
- if (rw == READ && pos < ei->valid_size && ei->valid_size < size) {
+ if (ret == -EIOCBQUEUED && rw == READ && pos < ei->valid_size &&
+ ei->valid_size < size) {
iov_iter_revert(iter, size - ei->valid_size);
iov_iter_zero(size - ei->valid_size, iter);
}