From: Jens Axboe <axboe@kernel.dk>
To: Pavel Begunkov <asml.silence@gmail.com>,
Stefan Metzmacher <metze@samba.org>
Cc: io-uring <io-uring@vger.kernel.org>,
Linux API Mailing List <linux-api@vger.kernel.org>
Subject: Re: IORING_REGISTER_CREDS[_UPDATE]() and credfd_create()?
Date: Wed, 29 Jan 2020 10:42:14 -0700 [thread overview]
Message-ID: <b3382961-8288-ec09-9019-5248f87dd86c@kernel.dk> (raw)
In-Reply-To: <9aef3b3b-7e71-f7f1-b366-2517b4d52719@kernel.dk>
On 1/29/20 10:34 AM, Jens Axboe wrote:
> On 1/29/20 7:23 AM, Pavel Begunkov wrote:
>>>>> The override_creds(personality_creds) has changed current->cred
>>>>> and get_current_cred() will just pick it up as in the default case.
>>>>>
>>>>> This would make the patch much simpler and allows put_cred() to be
>>>>> in io_put_work() instead of __io_req_aux_free() as explained above.
>>>>>
>>>>
>>>> It's one extra get_current_cred(). I'd prefer to find another way to
>>>> clean this up.
>>>
>>> As far as I can see it avoids a get_cred() in the IOSQE_PERSONALITY case
>>> and the if (!req->work.creds) for both cases.
>>
>> Great, that you turned attention to that! override_creds() is already
>> grabbing a ref, so it shouldn't call get_cred() there.
>> So, that's a bug.
>
> It's not though - one is dropped in that function, the other when the
> request is freed. So we do need two references to it. With the proposed
> change to keep the override_creds() variable local for that spot we
> don't, and the get_cred() can then go.
>
>> It could be I'm wrong with the statement above, need to recheck all this
>> code to be sure.
>
> I think you are :-)
>
>> BTW, io_req_defer_prep() may be called twice for a req, so you will
>> reassign it without putting a ref. It's safer to leave NULL checks. At
>> least, until I've done reworking and fixing preparation paths.
>
> Agree, the NULL checks are safer and we should keep them.
>
> Going through the rest of this thread, I'm making the following changes:
>
> - ID must be > 0. I like that change, as we don't need an sqe flag to
> select personality then, and it also makes it obvious that id == 0 is
> just using current creds.
>
> - Fixed the missing put_cred() in the teardown
>
> - Use a local variable in io_submit_sqe() instead of assigning the
> creds to req->work.creds there
>
> - Use cyclic idr allocation
>
> I'm going to fold in as appropriate. If there are fixes needed on top of
> that, let's do them separately.
In particular, would love a patch that only assigns req->work.creds if
we do go async, so we can leave the put_cred() in io_put_work()
instead of needing it in __io_req_aux_free().
--
Jens Axboe
WARNING: multiple messages have this Message-ID (diff)
From: Jens Axboe <axboe-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
To: Pavel Begunkov
<asml.silence-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
Stefan Metzmacher <metze-eUNUBHrolfbYtjvyW6yDsg@public.gmane.org>
Cc: io-uring <io-uring-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Linux API Mailing List
<linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: IORING_REGISTER_CREDS[_UPDATE]() and credfd_create()?
Date: Wed, 29 Jan 2020 10:42:14 -0700 [thread overview]
Message-ID: <b3382961-8288-ec09-9019-5248f87dd86c@kernel.dk> (raw)
In-Reply-To: <9aef3b3b-7e71-f7f1-b366-2517b4d52719-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
On 1/29/20 10:34 AM, Jens Axboe wrote:
> On 1/29/20 7:23 AM, Pavel Begunkov wrote:
>>>>> The override_creds(personality_creds) has changed current->cred
>>>>> and get_current_cred() will just pick it up as in the default case.
>>>>>
>>>>> This would make the patch much simpler and allows put_cred() to be
>>>>> in io_put_work() instead of __io_req_aux_free() as explained above.
>>>>>
>>>>
>>>> It's one extra get_current_cred(). I'd prefer to find another way to
>>>> clean this up.
>>>
>>> As far as I can see it avoids a get_cred() in the IOSQE_PERSONALITY case
>>> and the if (!req->work.creds) for both cases.
>>
>> Great, that you turned attention to that! override_creds() is already
>> grabbing a ref, so it shouldn't call get_cred() there.
>> So, that's a bug.
>
> It's not though - one is dropped in that function, the other when the
> request is freed. So we do need two references to it. With the proposed
> change to keep the override_creds() variable local for that spot we
> don't, and the get_cred() can then go.
>
>> It could be I'm wrong with the statement above, need to recheck all this
>> code to be sure.
>
> I think you are :-)
>
>> BTW, io_req_defer_prep() may be called twice for a req, so you will
>> reassign it without putting a ref. It's safer to leave NULL checks. At
>> least, until I've done reworking and fixing preparation paths.
>
> Agree, the NULL checks are safer and we should keep them.
>
> Going through the rest of this thread, I'm making the following changes:
>
> - ID must be > 0. I like that change, as we don't need an sqe flag to
> select personality then, and it also makes it obvious that id == 0 is
> just using current creds.
>
> - Fixed the missing put_cred() in the teardown
>
> - Use a local variable in io_submit_sqe() instead of assigning the
> creds to req->work.creds there
>
> - Use cyclic idr allocation
>
> I'm going to fold in as appropriate. If there are fixes needed on top of
> that, let's do them separately.
In particular, would love a patch that only assigns req->work.creds if
we do go async, so we can leave the put_cred() in io_put_work()
instead of needing it in __io_req_aux_free().
--
Jens Axboe
next prev parent reply other threads:[~2020-01-29 17:42 UTC|newest]
Thread overview: 96+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-28 10:18 IORING_REGISTER_CREDS[_UPDATE]() and credfd_create()? Stefan Metzmacher
2020-01-28 10:18 ` Stefan Metzmacher
2020-01-28 16:10 ` Jens Axboe
2020-01-28 16:10 ` Jens Axboe
2020-01-28 16:17 ` Stefan Metzmacher
2020-01-28 16:17 ` Stefan Metzmacher
2020-01-28 16:19 ` Jens Axboe
2020-01-28 16:19 ` Jens Axboe
2020-01-28 17:19 ` Jens Axboe
2020-01-28 17:19 ` Jens Axboe
2020-01-28 18:04 ` Jens Axboe
2020-01-28 18:04 ` Jens Axboe
2020-01-28 19:42 ` Jens Axboe
2020-01-28 19:42 ` Jens Axboe
2020-01-28 20:16 ` Pavel Begunkov
2020-01-28 20:16 ` Pavel Begunkov
2020-01-28 20:19 ` Jens Axboe
2020-01-28 20:19 ` Jens Axboe
2020-01-28 20:50 ` Pavel Begunkov
2020-01-28 20:50 ` Pavel Begunkov
2020-01-28 20:56 ` Jens Axboe
2020-01-28 20:56 ` Jens Axboe
2020-01-28 21:25 ` Christian Brauner
2020-01-28 21:25 ` Christian Brauner
2020-01-28 22:38 ` Pavel Begunkov
2020-01-28 22:38 ` Pavel Begunkov
2020-01-28 23:36 ` Pavel Begunkov
2020-01-28 23:36 ` Pavel Begunkov
2020-01-28 23:40 ` Jens Axboe
2020-01-28 23:40 ` Jens Axboe
2020-01-28 23:51 ` Jens Axboe
2020-01-28 23:51 ` Jens Axboe
2020-01-29 0:10 ` Pavel Begunkov
2020-01-29 0:10 ` Pavel Begunkov
2020-01-29 0:15 ` Jens Axboe
2020-01-29 0:15 ` Jens Axboe
2020-01-29 0:18 ` Jens Axboe
2020-01-29 0:18 ` Jens Axboe
2020-01-29 0:20 ` Jens Axboe
2020-01-29 0:20 ` Jens Axboe
2020-01-29 0:21 ` Pavel Begunkov
2020-01-29 0:21 ` Pavel Begunkov
2020-01-29 0:24 ` Jens Axboe
2020-01-29 0:24 ` Jens Axboe
2020-01-29 0:54 ` Jens Axboe
2020-01-29 0:54 ` Jens Axboe
2020-01-29 10:17 ` Pavel Begunkov
2020-01-29 10:17 ` Pavel Begunkov
2020-01-29 13:11 ` Stefan Metzmacher
2020-01-29 13:11 ` Stefan Metzmacher
2020-01-29 13:41 ` Pavel Begunkov
2020-01-29 13:41 ` Pavel Begunkov
2020-01-29 13:56 ` Stefan Metzmacher
2020-01-29 13:56 ` Stefan Metzmacher
2020-01-29 14:23 ` Pavel Begunkov
2020-01-29 14:23 ` Pavel Begunkov
2020-01-29 14:27 ` Stefan Metzmacher
2020-01-29 14:27 ` Stefan Metzmacher
2020-01-29 14:34 ` Pavel Begunkov
2020-01-29 14:34 ` Pavel Begunkov
2020-01-29 17:34 ` Jens Axboe
2020-01-29 17:34 ` Jens Axboe
2020-01-29 17:42 ` Jens Axboe [this message]
2020-01-29 17:42 ` Jens Axboe
2020-01-29 20:09 ` Stefan Metzmacher
2020-01-29 20:09 ` Stefan Metzmacher
2020-01-29 20:48 ` Jens Axboe
2020-01-29 20:48 ` Jens Axboe
2020-01-29 17:46 ` Pavel Begunkov
2020-01-29 17:46 ` Pavel Begunkov
2020-01-29 14:59 ` Jann Horn
2020-01-29 14:59 ` Jann Horn
2020-01-29 17:34 ` Jens Axboe
2020-01-29 17:34 ` Jens Axboe
2020-01-30 1:08 ` Jens Axboe
2020-01-30 1:08 ` Jens Axboe
2020-01-30 2:20 ` Jens Axboe
2020-01-30 2:20 ` Jens Axboe
2020-01-30 3:18 ` Jens Axboe
2020-01-30 3:18 ` Jens Axboe
2020-01-30 6:53 ` Stefan Metzmacher
2020-01-30 6:53 ` Stefan Metzmacher
2020-01-30 10:11 ` Jann Horn
2020-01-30 10:11 ` Jann Horn
2020-01-30 10:26 ` Christian Brauner
2020-01-30 10:26 ` Christian Brauner
2020-01-30 14:11 ` Jens Axboe
2020-01-30 14:11 ` Jens Axboe
2020-01-30 14:47 ` Stefan Metzmacher
2020-01-30 14:47 ` Stefan Metzmacher
2020-01-30 15:34 ` Jens Axboe
2020-01-30 15:34 ` Jens Axboe
2020-01-30 15:13 ` Christian Brauner
2020-01-30 15:13 ` Christian Brauner
2020-01-30 15:29 ` Jens Axboe
2020-01-30 15:29 ` Jens Axboe
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 \
--in-reply-to=b3382961-8288-ec09-9019-5248f87dd86c@kernel.dk \
--to=axboe@kernel.dk \
--cc=asml.silence@gmail.com \
--cc=io-uring@vger.kernel.org \
--cc=linux-api@vger.kernel.org \
--cc=metze@samba.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.