diff options
author | Jens Axboe <axboe@kernel.dk> | 2020-09-13 13:09:39 -0600 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2020-09-30 20:32:32 -0600 |
commit | 0f2122045b946241a9e549c2a76cea54fa58a7ff (patch) | |
tree | 76cea5c487f38bff85e18933a8477b47d5514e05 /init/init_task.c | |
parent | e6c8aa9ac33bd7c968af7816240fc081401fddcd (diff) | |
download | lwn-0f2122045b946241a9e549c2a76cea54fa58a7ff.tar.gz lwn-0f2122045b946241a9e549c2a76cea54fa58a7ff.zip |
io_uring: don't rely on weak ->files references
Grab actual references to the files_struct. To avoid circular references
issues due to this, we add a per-task note that keeps track of what
io_uring contexts a task has used. When the tasks execs or exits its
assigned files, we cancel requests based on this tracking.
With that, we can grab proper references to the files table, and no
longer need to rely on stashing away ring_fd and ring_file to check
if the ring_fd may have been closed.
Cc: stable@vger.kernel.org # v5.5+
Reviewed-by: Pavel Begunkov <asml.silence@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'init/init_task.c')
-rw-r--r-- | init/init_task.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/init/init_task.c b/init/init_task.c index f6889fce64af..a56f0abb63e9 100644 --- a/init/init_task.c +++ b/init/init_task.c @@ -114,6 +114,9 @@ struct task_struct init_task .thread = INIT_THREAD, .fs = &init_fs, .files = &init_files, +#ifdef CONFIG_IO_URING + .io_uring = NULL, +#endif .signal = &init_signals, .sighand = &init_sighand, .nsproxy = &init_nsproxy, |