summaryrefslogtreecommitdiff
path: root/fs/io_uring.c
diff options
context:
space:
mode:
authorJens Axboe <axboe@kernel.dk>2020-09-18 20:13:06 -0600
committerJens Axboe <axboe@kernel.dk>2020-09-30 20:32:32 -0600
commit9b8284921513fc1ea57d87777283a59b05862f03 (patch)
treee9189b99746af8e30db89f81b025fd1d7e282431 /fs/io_uring.c
parent0f2122045b946241a9e549c2a76cea54fa58a7ff (diff)
downloadlwn-9b8284921513fc1ea57d87777283a59b05862f03.tar.gz
lwn-9b8284921513fc1ea57d87777283a59b05862f03.zip
io_uring: reference ->nsproxy for file table commands
If we don't get and assign the namespace for the async work, then certain paths just don't work properly (like /dev/stdin, /proc/mounts, etc). Anything that references the current namespace of the given task should be assigned for async work on behalf of that task. Cc: stable@vger.kernel.org # v5.5+ Reported-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'fs/io_uring.c')
-rw-r--r--fs/io_uring.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/io_uring.c b/fs/io_uring.c
index ee75ba7113cf..05ec385a6094 100644
--- a/fs/io_uring.c
+++ b/fs/io_uring.c
@@ -5678,6 +5678,7 @@ static void io_req_drop_files(struct io_kiocb *req)
spin_unlock_irqrestore(&ctx->inflight_lock, flags);
req->flags &= ~REQ_F_INFLIGHT;
put_files_struct(req->work.files);
+ put_nsproxy(req->work.nsproxy);
req->work.files = NULL;
}
@@ -6086,6 +6087,8 @@ static int io_grab_files(struct io_kiocb *req)
return 0;
req->work.files = get_files_struct(current);
+ get_nsproxy(current->nsproxy);
+ req->work.nsproxy = current->nsproxy;
req->flags |= REQ_F_INFLIGHT;
spin_lock_irq(&ctx->inflight_lock);