diff options
author | 2020-09-01 13:35:02 +0800 | |
---|---|---|
committer | 2020-09-01 08:04:58 -0600 | |
commit | 98dfd5024a2e9e170b85c07078e2d89f20a5dfbd (patch) | |
tree | 84aedd19ec15ce61c55093cf6ed3adf7078d0736 /fs | |
parent | io_uring: don't bounce block based -EAGAIN retry off task_work (diff) | |
download | linux-98dfd5024a2e9e170b85c07078e2d89f20a5dfbd.tar.gz linux-98dfd5024a2e9e170b85c07078e2d89f20a5dfbd.tar.bz2 linux-98dfd5024a2e9e170b85c07078e2d89f20a5dfbd.zip |
io_uring: fix removing the wrong file in __io_sqe_files_update()
Index here is already the position of the file in fixed_file_table, we
should not use io_file_from_index() again to get it. Otherwise, the
wrong file which still in use may be released unexpectedly.
Cc: stable@vger.kernel.org # v5.6
Fixes: 05f3fb3c5397 ("io_uring: avoid ring quiesce for fixed file set unregister and update")
Signed-off-by: Jiufei Xue <jiufei.xue@linux.alibaba.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/io_uring.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/io_uring.c b/fs/io_uring.c index 852c2eaf1a9a..a06b56289039 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -7324,7 +7324,7 @@ static int __io_sqe_files_update(struct io_ring_ctx *ctx, table = &ctx->file_data->table[i >> IORING_FILE_TABLE_SHIFT]; index = i & IORING_FILE_TABLE_MASK; if (table->files[index]) { - file = io_file_from_index(ctx, index); + file = table->files[index]; err = io_queue_file_removal(data, file); if (err) break; |