This is a note to let you know that I've just added the patch titled io_uring: don't use 'fd' for openat/openat2/statx to the 5.6-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: io_uring-don-t-use-fd-for-openat-openat2-statx.patch and it can be found in the queue-5.6 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From 63ff822358b276137059520cf16e587e8073e80f Mon Sep 17 00:00:00 2001 From: Max Kellermann <mk@xxxxxxxxxx> Date: Thu, 7 May 2020 14:56:15 -0600 Subject: io_uring: don't use 'fd' for openat/openat2/statx From: Max Kellermann <mk@xxxxxxxxxx> Based on commit 63ff822358b276137059520cf16e587e8073e80f upstream. If an operation's flag `needs_file` is set, the function io_req_set_file() calls io_file_get() to obtain a `struct file*`. This fails for `O_PATH` file descriptors, because io_file_get() calls fget(), which rejects `O_PATH` file descriptors. To support `O_PATH`, fdget_raw() must be used (like path_init() in `fs/namei.c` does). This rejection causes io_req_set_file() to throw `-EBADF`. This breaks the operations `openat`, `openat2` and `statx`, where `O_PATH` file descriptors are commonly used. This could be solved by adding support for `O_PATH` file descriptors with another `io_op_def` flag, but since those three operations don't need the `struct file*` but operate directly on the numeric file descriptors, the best solution here is to simply remove `needs_file` (and the accompanying flag `fd_non_reg`). Cc: stable@xxxxxxxxxxxxxxx Signed-off-by: Max Kellermann <mk@xxxxxxxxxx> Signed-off-by: Jens Axboe <axboe@xxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- fs/io_uring.c | 6 ------ 1 file changed, 6 deletions(-) --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -696,8 +696,6 @@ static const struct io_op_def io_op_defs .needs_file = 1, }, [IORING_OP_OPENAT] = { - .needs_file = 1, - .fd_non_neg = 1, .file_table = 1, .needs_fs = 1, }, @@ -711,8 +709,6 @@ static const struct io_op_def io_op_defs }, [IORING_OP_STATX] = { .needs_mm = 1, - .needs_file = 1, - .fd_non_neg = 1, .needs_fs = 1, .file_table = 1, }, @@ -743,8 +739,6 @@ static const struct io_op_def io_op_defs .unbound_nonreg_file = 1, }, [IORING_OP_OPENAT2] = { - .needs_file = 1, - .fd_non_neg = 1, .file_table = 1, .needs_fs = 1, }, Patches currently in stable-queue which might be from mk@xxxxxxxxxx are queue-5.6/io_uring-don-t-use-fd-for-openat-openat2-statx.patch