io_uring: zero iocb->ki_pos for stream file types
authorJens Axboe <axboe@kernel.dk>
Thu, 23 Dec 2021 03:26:56 +0000 (20:26 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 29 Dec 2021 11:28:45 +0000 (12:28 +0100)
commit20fb0dc35bf9f2f3ff6336bc0dd21e22bbc6d51a
treecdc7f5fc46d0ef8b546069f7d9e4e7fe6ebb1754
parent5cf03976e1f00b008928256255abc803e3872153
io_uring: zero iocb->ki_pos for stream file types

[ Upstream commit 7b9762a5e8837b92a027d58d396a9d27f6440c36 ]

io_uring supports using offset == -1 for using the current file position,
and we read that in as part of read/write command setup. For the non-iter
read/write types we pass in NULL for the position pointer, but for the
iter types we should not be passing any anything but 0 for the position
for a stream.

Clear kiocb->ki_pos if the file is a stream, don't leave it as -1. If we
do, then the request will error with -ESPIPE.

Fixes: ba04291eb66e ("io_uring: allow use of offset == -1 to mean file position")
Link: https://github.com/axboe/liburing/discussions/501
Reported-by: Samuel Williams <samuel.williams@oriontransfer.co.nz>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/io_uring.c