Patch "fsdax: Fix infinite loop in dax_iomap_rw()" has been added to the 5.19-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    fsdax: Fix infinite loop in dax_iomap_rw()

to the 5.19-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     fsdax-fix-infinite-loop-in-dax_iomap_rw.patch
and it can be found in the queue-5.19 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit b8bb9bc0cdd9c91ab1f82f76b1c89c15702873c6
Author: Li Jinlin <lijinlin3@xxxxxxxxxx>
Date:   Mon Jul 25 11:20:50 2022 +0800

    fsdax: Fix infinite loop in dax_iomap_rw()
    
    [ Upstream commit 17d9c15c9b9e7fb285f7ac5367dfb5f00ff575e3 ]
    
    I got an infinite loop and a WARNING report when executing a tail command
    in virtiofs.
    
      WARNING: CPU: 10 PID: 964 at fs/iomap/iter.c:34 iomap_iter+0x3a2/0x3d0
      Modules linked in:
      CPU: 10 PID: 964 Comm: tail Not tainted 5.19.0-rc7
      Call Trace:
      <TASK>
      dax_iomap_rw+0xea/0x620
      ? __this_cpu_preempt_check+0x13/0x20
      fuse_dax_read_iter+0x47/0x80
      fuse_file_read_iter+0xae/0xd0
      new_sync_read+0xfe/0x180
      ? 0xffffffff81000000
      vfs_read+0x14d/0x1a0
      ksys_read+0x6d/0xf0
      __x64_sys_read+0x1a/0x20
      do_syscall_64+0x3b/0x90
      entry_SYSCALL_64_after_hwframe+0x63/0xcd
    
    The tail command will call read() with a count of 0. In this case,
    iomap_iter() will report this WARNING, and always return 1 which casuing
    the infinite loop in dax_iomap_rw().
    
    Fixing by checking count whether is 0 in dax_iomap_rw().
    
    Fixes: ca289e0b95af ("fsdax: switch dax_iomap_rw to use iomap_iter")
    Signed-off-by: Li Jinlin <lijinlin3@xxxxxxxxxx>
    Reviewed-by: Darrick J. Wong <djwong@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/20220725032050.3873372-1-lijinlin3@xxxxxxxxxx
    Signed-off-by: Dan Williams <dan.j.williams@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/fs/dax.c b/fs/dax.c
index 4155a6107fa1..7ab248ed21aa 100644
--- a/fs/dax.c
+++ b/fs/dax.c
@@ -1241,6 +1241,9 @@ dax_iomap_rw(struct kiocb *iocb, struct iov_iter *iter,
 	loff_t done = 0;
 	int ret;
 
+	if (!iomi.len)
+		return 0;
+
 	if (iov_iter_rw(iter) == WRITE) {
 		lockdep_assert_held_write(&iomi.inode->i_rwsem);
 		iomi.flags |= IOMAP_WRITE;



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux