io_uring: fix race condition reading SQE data
authorStefan Bühler <source@stbuehler.de>
Sat, 11 May 2019 17:08:01 +0000 (19:08 +0200)
committerJens Axboe <axboe@kernel.dk>
Mon, 13 May 2019 15:15:42 +0000 (09:15 -0600)
commite2033e33cb3821c26d4f9e70677910827d3b7885
tree9a4c0da34b35916590b1104581ccd89339ea6d94
parenta13f0655503a4a89df67fdc7cac6a7810795d4b3
io_uring: fix race condition reading SQE data

When punting to workers the SQE gets copied after the initial try.
There is a race condition between reading SQE data for the initial try
and copying it for punting it to the workers.

For example io_rw_done calls kiocb->ki_complete even if it was prepared
for IORING_OP_FSYNC (and would be NULL).

The easiest solution for now is to alway prepare again in the worker.

req->file is safe to prepare though as long as it is checked before use.

Signed-off-by: Stefan Bühler <source@stbuehler.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c