pipe: Fix iteration end check in fuse_dev_splice_write()
authorDavid Howells <dhowells@redhat.com>
Fri, 6 Dec 2019 21:34:51 +0000 (21:34 +0000)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 6 Dec 2019 21:57:04 +0000 (13:57 -0800)
Fix the iteration end check in fuse_dev_splice_write().  The iterator
position can only be compared with == or != since wrappage may be involved.

Fixes: 8cefc107ca54 ("pipe: Use head and tail pointers for the ring, not cursor and length")
Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/fuse/dev.c

index d4e6691..8e02d76 100644 (file)
@@ -1965,7 +1965,7 @@ static ssize_t fuse_dev_splice_write(struct pipe_inode_info *pipe,
 
        nbuf = 0;
        rem = 0;
-       for (idx = tail; idx < head && rem < len; idx++)
+       for (idx = tail; idx != head && rem < len; idx++)
                rem += pipe->bufs[idx & mask].len;
 
        ret = -EINVAL;