From: Hao Xu <[email protected]>
To: Pavel Begunkov <[email protected]>, [email protected]
Cc: Jens Axboe <[email protected]>, [email protected]
Subject: Re: [PATCH 3/5] io_uring: let fast poll support multishot
Date: Sat, 7 May 2022 19:06:30 +0800 [thread overview]
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
在 2022/5/7 下午5:47, Pavel Begunkov 写道:
> On 5/7/22 08:08, Hao Xu wrote:
>> 在 2022/5/7 上午1:19, Pavel Begunkov 写道:
>>> On 5/6/22 08:01, Hao Xu wrote:
> [...]
>>> That looks dangerous, io_queue_sqe() usually takes the request ownership
>>> and doesn't expect that someone, i.e. io_poll_check_events(), may
>>> still be
>>> actively using it.
>>>
>>> E.g. io_accept() fails on fd < 0, return an error,
>>> io_queue_sqe() -> io_queue_async() -> io_req_complete_failed()
>>> kills it. Then io_poll_check_events() and polling in general
>>> carry on using the freed request => UAF. Didn't look at it
>>> too carefully, but there might other similar cases.
>>>
>> I checked this when I did the coding, it seems the only case is
>> while (atomic_sub_return(v & IO_POLL_REF_MASK, &req->poll_refs));
>> uses req again after req recycled in io_queue_sqe() path like you
>> pointed out above, but this case should be ok since we haven't
>> reuse the struct req{} at that point.
>
> Replied to another message with an example that I think might
> be broken, please take a look.
I saw it just now, it looks a valid case to me. Thanks.
>
> The issue is that io_queue_sqe() was always consuming / freeing /
> redirecting / etc. requests, i.e. call it and forget about the req.
> With io_accept now it may or may not free it and not even returning
> any return code about that. This implicit knowledge is quite tricky
> to maintain.
>
> might make more sense to "duplicate" io_queue_sqe()
>
> ret = io_issue_sqe(req, IO_URING_F_NONBLOCK|IO_URING_F_COMPLETE_DEFER);
> // REQ_F_COMPLETE_INLINE should never happen, no check for that
> // don't care about io_arm_ltimeout(), should already be armed
> // ret handling here
This is what I'm doing for v3, indeed make more sense.
next prev parent reply other threads:[~2022-05-07 11:06 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-06 7:00 [PATCH v2 0/5] fast poll multishot mode Hao Xu
2022-05-06 7:00 ` [PATCH 1/5] io_uring: add IORING_ACCEPT_MULTISHOT for accept Hao Xu
2022-05-06 14:32 ` Jens Axboe
2022-05-07 4:05 ` Hao Xu
2022-05-06 7:00 ` [PATCH 2/5] io_uring: add REQ_F_APOLL_MULTISHOT for requests Hao Xu
2022-05-06 7:01 ` [PATCH 3/5] io_uring: let fast poll support multishot Hao Xu
2022-05-06 17:19 ` Pavel Begunkov
2022-05-06 22:02 ` Jens Axboe
2022-05-07 6:32 ` Hao Xu
2022-05-07 9:26 ` Pavel Begunkov
2022-05-07 7:08 ` Hao Xu
2022-05-07 9:47 ` Pavel Begunkov
2022-05-07 11:06 ` Hao Xu [this message]
2022-05-06 18:02 ` kernel test robot
2022-05-06 7:01 ` [PATCH 4/5] io_uring: add a helper for poll clean Hao Xu
2022-05-06 11:04 ` kernel test robot
2022-05-06 12:47 ` kernel test robot
2022-05-06 14:36 ` Jens Axboe
2022-05-07 6:37 ` Hao Xu
2022-05-06 16:22 ` Pavel Begunkov
2022-05-07 6:43 ` Hao Xu
2022-05-07 9:29 ` Pavel Begunkov
2022-05-06 7:01 ` [PATCH 5/5] io_uring: implement multishot mode for accept Hao Xu
2022-05-06 14:42 ` Jens Axboe
2022-05-07 9:13 ` Hao Xu
2022-05-06 20:50 ` Jens Axboe
2022-05-06 21:29 ` Jens Axboe
2022-05-06 7:36 ` [PATCH v2 0/5] fast poll multishot mode Hao Xu
2022-05-06 14:18 ` Jens Axboe
2022-05-06 16:01 ` Pavel Begunkov
2022-05-06 16:03 ` Jens Axboe
2022-05-06 22:23 ` Jens Axboe
2022-05-06 23:26 ` Jens Axboe
2022-05-07 2:33 ` Jens Axboe
2022-05-07 3:08 ` Jens Axboe
2022-05-07 16:01 ` Hao Xu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox