io_uring: disallow close of ring itself
authorJens Axboe <axboe@kernel.dk>
Tue, 2 Jun 2020 22:40:47 +0000 (16:40 -0600)
committerJens Axboe <axboe@kernel.dk>
Tue, 2 Jun 2020 23:22:24 +0000 (17:22 -0600)
commitfd2206e4e97b5bae422d9f2f9ebbc79bc97e44a5
tree6f58277d8de9b3af3a2ac79dd795f2c41bdb611d
parent1ee08de1e234d95b5b4f866878b72fceb5372904
io_uring: disallow close of ring itself

A previous commit enabled this functionality, which also enabled O_PATH
to work correctly with io_uring. But we can't safely close the ring
itself, as the file handle isn't reference counted inside
io_uring_enter(). Instead of jumping through hoops to enable ring
closure, add a "soft" ->needs_file option, ->needs_file_no_error. This
enables O_PATH file descriptors to work, but still catches the case of
trying to close the ring itself.

Reported-by: Jann Horn <jannh@google.com>
Fixes: 904fbcb115c8 ("io_uring: remove 'fd is io_uring' from close path")
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c