lkml.org 
[lkml]   [2020]   [Sep]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.8 58/99] io_uring: fix openat/openat2 unified prep handling
    Date
    From: Jens Axboe <axboe@kernel.dk>

    [ Upstream commit 4eb8dded6b82e184c09bb963bea0335fa3f30b55 ]

    A previous commit unified how we handle prep for these two functions,
    but this means that we check the allowed context (SQPOLL, specifically)
    later than we should. Move the ring type checking into the two parent
    functions, instead of doing it after we've done some setup work.

    Fixes: ec65fea5a8d7 ("io_uring: deduplicate io_openat{,2}_prep()")
    Reported-by: Andy Lutomirski <luto@kernel.org>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/io_uring.c | 6 ++++--
    1 file changed, 4 insertions(+), 2 deletions(-)

    diff --git a/fs/io_uring.c b/fs/io_uring.c
    index d05023ca74bdc..849e39c3cfcd7 100644
    --- a/fs/io_uring.c
    +++ b/fs/io_uring.c
    @@ -3056,8 +3056,6 @@ static int __io_openat_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe
    const char __user *fname;
    int ret;

    - if (unlikely(req->ctx->flags & (IORING_SETUP_IOPOLL|IORING_SETUP_SQPOLL)))
    - return -EINVAL;
    if (unlikely(sqe->ioprio || sqe->buf_index))
    return -EINVAL;
    if (unlikely(req->flags & REQ_F_FIXED_FILE))
    @@ -3084,6 +3082,8 @@ static int io_openat_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
    {
    u64 flags, mode;

    + if (unlikely(req->ctx->flags & (IORING_SETUP_IOPOLL|IORING_SETUP_SQPOLL)))
    + return -EINVAL;
    if (req->flags & REQ_F_NEED_CLEANUP)
    return 0;
    mode = READ_ONCE(sqe->len);
    @@ -3098,6 +3098,8 @@ static int io_openat2_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
    size_t len;
    int ret;

    + if (unlikely(req->ctx->flags & (IORING_SETUP_IOPOLL|IORING_SETUP_SQPOLL)))
    + return -EINVAL;
    if (req->flags & REQ_F_NEED_CLEANUP)
    return 0;
    how = u64_to_user_ptr(READ_ONCE(sqe->addr2));
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-09-29 13:50    [W:2.166 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site