All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jens Axboe <axboe@kernel.dk>
To: Stefan Metzmacher <metze@samba.org>
Cc: io-uring <io-uring@vger.kernel.org>,
	Linux API Mailing List <linux-api@vger.kernel.org>,
	Pavel Begunkov <asml.silence@gmail.com>
Subject: Re: IORING_REGISTER_CREDS[_UPDATE]() and credfd_create()?
Date: Tue, 28 Jan 2020 10:19:51 -0700	[thread overview]
Message-ID: <1ac31828-e915-6180-cdb4-36685442ea75@kernel.dk> (raw)
In-Reply-To: <b29e972e-5ca0-8b5f-46b3-36f93d865723@kernel.dk>

On 1/28/20 9:19 AM, Jens Axboe wrote:
> On 1/28/20 9:17 AM, Stefan Metzmacher wrote:
>> Am 28.01.20 um 17:10 schrieb Jens Axboe:
>>> On 1/28/20 3:18 AM, Stefan Metzmacher wrote:
>>>> Hi Jens,
>>>>
>>>> now that we have IORING_FEAT_CUR_PERSONALITY...
>>>>
>>>> How can we optimize the fileserver case now, in order to avoid the
>>>> overhead of always calling 5 syscalls before io_uring_enter()?:
>>>>
>>>>  /* gain root again */
>>>>  setresuid(-1,0,-1); setresgid(-1,0,-1)
>>>>  /* impersonate the user with groups */
>>>>  setgroups(num, grps); setresgid(-1,gid,-1); setresuid(-1,uid,-1);
>>>>  /* trigger the operation */
>>>>  io_uring_enter();
>>>>
>>>> I guess some kind of IORING_REGISTER_CREDS[_UPDATE] would be
>>>> good, together with a IOSQE_FIXED_CREDS in order to specify
>>>> credentials per operation.
>>>>
>>>> Or we make it much more generic and introduce a credsfd_create()
>>>> syscall in order to get an fd for a credential handle, maybe
>>>> together with another syscall to activate the credentials of
>>>> the current thread (or let a write to the fd trigger the activation
>>>> in order to avoid an additional syscall number).
>>>>
>>>> Having just an fd would allow IORING_REGISTER_CREDS[_UPDATE]
>>>> to be just an array of int values instead of a more complex
>>>> structure to define the credentials.
>>>
>>> I'd rather avoid having to add more infrastructure for this, even if
>>> credsfd_create() would be nifty.
>>>
>>> With that in mind, something like:
>>>
>>> - Application does IORING_REGISTER_CREDS, which returns some index
>>>
>>> - Add a IORING_OP_USE_CREDS opcode, which sets the creds associated
>>>   with dependent commands
>>> - Actual request is linked to the IORING_OP_USE_CREDS command, any
>>>   link off IORING_OP_USE_CREDS will use those credentials
>>
>> Using links for this sounds ok.
> 
> Great! I'll try and hack this up and see how it turns out.
> 
>>> - IORING_UNREGISTER_CREDS removes the registered creds
>>>
>>> Just throwing that out there, definitely willing to entertain other
>>> methods that make sense for this. Trying to avoid needing to put this
>>> information in the SQE itself, hence the idea to use a chain of links
>>> for it.
>>>
>>> The downside is that we'll need to maintain an array of key -> creds,
>>> but that's probably not a big deal.
>>>
>>> What do you think?
>>
>> So IORING_REGISTER_CREDS would be a simple operation that just takes a
>> snapshot of the current_cred() and returns an id that can be passed to
>> IORING_OP_USE_CREDS or IORING_UNREGISTER_CREDS?
> 
> Right, you would not pass in any arguments, it'd have to be run from the
> personality you wish to register. It simply returns an integer, which is
> a key to use for IORING_OP_USE_CREDS, or at the end for
> IORING_UNREGISTER_CREDS when you no longer wish to use this personality.
> 
>>> Ideally I'd like to get this done for 5.6 even if we
>>> are a bit late, so you'll have everything you need with that release.
>>
>> That would be great!
> 
> Crossing fingers...

OK, so here are two patches for testing:

https://git.kernel.dk/cgit/linux-block/log/?h=for-5.6/io_uring-vfs-creds

#1 adds support for registering the personality of the invoking task,
and #2 adds support for IORING_OP_USE_CREDS. Right now it's limited to
just having one link, it doesn't support a chain of them.

I'll try and write a test case for this just to see if it actually works,
so far it's totally untested. 

Adding Pavel to the CC.

-- 
Jens Axboe


WARNING: multiple messages have this Message-ID (diff)
From: Jens Axboe <axboe-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
To: 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>,
	Pavel Begunkov
	<asml.silence-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Subject: Re: IORING_REGISTER_CREDS[_UPDATE]() and credfd_create()?
Date: Tue, 28 Jan 2020 10:19:51 -0700	[thread overview]
Message-ID: <1ac31828-e915-6180-cdb4-36685442ea75@kernel.dk> (raw)
In-Reply-To: <b29e972e-5ca0-8b5f-46b3-36f93d865723-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>

On 1/28/20 9:19 AM, Jens Axboe wrote:
> On 1/28/20 9:17 AM, Stefan Metzmacher wrote:
>> Am 28.01.20 um 17:10 schrieb Jens Axboe:
>>> On 1/28/20 3:18 AM, Stefan Metzmacher wrote:
>>>> Hi Jens,
>>>>
>>>> now that we have IORING_FEAT_CUR_PERSONALITY...
>>>>
>>>> How can we optimize the fileserver case now, in order to avoid the
>>>> overhead of always calling 5 syscalls before io_uring_enter()?:
>>>>
>>>>  /* gain root again */
>>>>  setresuid(-1,0,-1); setresgid(-1,0,-1)
>>>>  /* impersonate the user with groups */
>>>>  setgroups(num, grps); setresgid(-1,gid,-1); setresuid(-1,uid,-1);
>>>>  /* trigger the operation */
>>>>  io_uring_enter();
>>>>
>>>> I guess some kind of IORING_REGISTER_CREDS[_UPDATE] would be
>>>> good, together with a IOSQE_FIXED_CREDS in order to specify
>>>> credentials per operation.
>>>>
>>>> Or we make it much more generic and introduce a credsfd_create()
>>>> syscall in order to get an fd for a credential handle, maybe
>>>> together with another syscall to activate the credentials of
>>>> the current thread (or let a write to the fd trigger the activation
>>>> in order to avoid an additional syscall number).
>>>>
>>>> Having just an fd would allow IORING_REGISTER_CREDS[_UPDATE]
>>>> to be just an array of int values instead of a more complex
>>>> structure to define the credentials.
>>>
>>> I'd rather avoid having to add more infrastructure for this, even if
>>> credsfd_create() would be nifty.
>>>
>>> With that in mind, something like:
>>>
>>> - Application does IORING_REGISTER_CREDS, which returns some index
>>>
>>> - Add a IORING_OP_USE_CREDS opcode, which sets the creds associated
>>>   with dependent commands
>>> - Actual request is linked to the IORING_OP_USE_CREDS command, any
>>>   link off IORING_OP_USE_CREDS will use those credentials
>>
>> Using links for this sounds ok.
> 
> Great! I'll try and hack this up and see how it turns out.
> 
>>> - IORING_UNREGISTER_CREDS removes the registered creds
>>>
>>> Just throwing that out there, definitely willing to entertain other
>>> methods that make sense for this. Trying to avoid needing to put this
>>> information in the SQE itself, hence the idea to use a chain of links
>>> for it.
>>>
>>> The downside is that we'll need to maintain an array of key -> creds,
>>> but that's probably not a big deal.
>>>
>>> What do you think?
>>
>> So IORING_REGISTER_CREDS would be a simple operation that just takes a
>> snapshot of the current_cred() and returns an id that can be passed to
>> IORING_OP_USE_CREDS or IORING_UNREGISTER_CREDS?
> 
> Right, you would not pass in any arguments, it'd have to be run from the
> personality you wish to register. It simply returns an integer, which is
> a key to use for IORING_OP_USE_CREDS, or at the end for
> IORING_UNREGISTER_CREDS when you no longer wish to use this personality.
> 
>>> Ideally I'd like to get this done for 5.6 even if we
>>> are a bit late, so you'll have everything you need with that release.
>>
>> That would be great!
> 
> Crossing fingers...

OK, so here are two patches for testing:

https://git.kernel.dk/cgit/linux-block/log/?h=for-5.6/io_uring-vfs-creds

#1 adds support for registering the personality of the invoking task,
and #2 adds support for IORING_OP_USE_CREDS. Right now it's limited to
just having one link, it doesn't support a chain of them.

I'll try and write a test case for this just to see if it actually works,
so far it's totally untested. 

Adding Pavel to the CC.

-- 
Jens Axboe

  reply	other threads:[~2020-01-28 17:19 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 [this message]
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
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=1ac31828-e915-6180-cdb4-36685442ea75@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.