summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorPavel Begunkov <asml.silence@gmail.com>2019-10-27 22:10:36 +0300
committerJens Axboe <axboe@kernel.dk>2019-10-28 06:29:18 +0300
commit7b20238d28da46f394d37d4d51cc420e1ff9414a (patch)
tree94a5f93471b51d76560dfef1c66059d076f05394 /fs
parentd6d5df1db6e9d7f8f76d2911707f7d5877251b02 (diff)
downloadlinux-7b20238d28da46f394d37d4d51cc420e1ff9414a.tar.xz
io_uring: Fix leaked shadow_req
io_queue_link_head() owns shadow_req after taking it as an argument. By not freeing it in case of an error, it can leak the request along with taken ctx->refs. Reviewed-by: Jackie Liu <liuyun01@kylinos.cn> Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'fs')
-rw-r--r--fs/io_uring.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/io_uring.c b/fs/io_uring.c
index a30c4f622cb3..ba1431046c98 100644
--- a/fs/io_uring.c
+++ b/fs/io_uring.c
@@ -2413,6 +2413,7 @@ static int io_queue_link_head(struct io_ring_ctx *ctx, struct io_kiocb *req,
if (ret) {
if (ret != -EIOCBQUEUED) {
io_free_req(req);
+ __io_free_req(shadow);
io_cqring_add_event(ctx, s->sqe->user_data, ret);
return 0;
}