]> git.itanic.dy.fi Git - linux-stable/commit
io_uring/net: fix multishot accept overflow handling
authorJens Axboe <axboe@kernel.dk>
Wed, 14 Feb 2024 15:23:05 +0000 (08:23 -0700)
committerJens Axboe <axboe@kernel.dk>
Thu, 15 Feb 2024 01:30:19 +0000 (18:30 -0700)
commita37ee9e117ef73bbc2f5c0b31911afd52d229861
treeae2d6b3224b9e5e8d4a9d967a1d7f1b8afcb57b9
parent72bd80252feeb3bef8724230ee15d9f7ab541c6e
io_uring/net: fix multishot accept overflow handling

If we hit CQ ring overflow when attempting to post a multishot accept
completion, we don't properly save the result or return code. This
results in losing the accepted fd value.

Instead, we return the result from the poll operation that triggered
the accept retry. This is generally POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND
which is 0xc3, or 195, which looks like a valid file descriptor, but it
really has no connection to that.

Handle this like we do for other multishot completions - assign the
result, and return IOU_STOP_MULTISHOT to cancel any further completions
from this request when overflow is hit. This preserves the result, as we
should, and tells the application that the request needs to be re-armed.

Cc: stable@vger.kernel.org
Fixes: 515e26961295 ("io_uring: revert "io_uring fix multishot accept ordering"")
Link: https://github.com/axboe/liburing/issues/1062
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/net.c