mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-10 07:10:27 +00:00
io_uring: add cleanup for openat()/statx()
openat() and statx() may have allocated ->open.filename, which should be be put. Add cleanup handlers for them. Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
99bc4c3853
commit
8fef80bf56
@ -2537,6 +2537,7 @@ static int io_openat_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
|
||||
return ret;
|
||||
}
|
||||
|
||||
req->flags |= REQ_F_NEED_CLEANUP;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -2575,6 +2576,7 @@ static int io_openat2_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
|
||||
return ret;
|
||||
}
|
||||
|
||||
req->flags |= REQ_F_NEED_CLEANUP;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -2606,6 +2608,7 @@ static int io_openat2(struct io_kiocb *req, struct io_kiocb **nxt,
|
||||
}
|
||||
err:
|
||||
putname(req->open.filename);
|
||||
req->flags &= ~REQ_F_NEED_CLEANUP;
|
||||
if (ret < 0)
|
||||
req_set_fail_links(req);
|
||||
io_cqring_add_event(req, ret);
|
||||
@ -2765,6 +2768,7 @@ static int io_statx_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
|
||||
return ret;
|
||||
}
|
||||
|
||||
req->flags |= REQ_F_NEED_CLEANUP;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -2802,6 +2806,7 @@ retry:
|
||||
ret = cp_statx(&stat, ctx->buffer);
|
||||
err:
|
||||
putname(ctx->filename);
|
||||
req->flags &= ~REQ_F_NEED_CLEANUP;
|
||||
if (ret < 0)
|
||||
req_set_fail_links(req);
|
||||
io_cqring_add_event(req, ret);
|
||||
@ -4223,6 +4228,11 @@ static void io_cleanup_req(struct io_kiocb *req)
|
||||
if (io->msg.iov != io->msg.fast_iov)
|
||||
kfree(io->msg.iov);
|
||||
break;
|
||||
case IORING_OP_OPENAT:
|
||||
case IORING_OP_OPENAT2:
|
||||
case IORING_OP_STATX:
|
||||
putname(req->open.filename);
|
||||
break;
|
||||
}
|
||||
|
||||
req->flags &= ~REQ_F_NEED_CLEANUP;
|
||||
|
Loading…
x
Reference in New Issue
Block a user