• Jens Axboe's avatar
    io_uring/net: fix multishot accept overflow handling · a37ee9e1
    Jens Axboe authored
    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: 515e2696 ("io_uring: revert "io_uring fix multishot accept ordering"")
    Link: https://github.com/axboe/liburing/issues/1062Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    a37ee9e1
net.c 38.8 KB