From: Ian Kent <ikent@redhat.com>
To: Benjamin Coddington <bcodding@redhat.com>
Cc: "David Howells" <dhowells@redhat.com>,
"Jeff Layton" <jeff.layton@primarydata.com>,
"David Härdeman" <david@hardeman.nu>,
linux-nfs@vger.kernel.org, SteveD@redhat.com
Subject: Re: [PATCH 00/19] gssd improvements
Date: Thu, 11 Dec 2014 08:12:43 +0800 [thread overview]
Message-ID: <1418256763.2566.61.camel@pluto.fritz.box> (raw)
In-Reply-To: <alpine.OSX.2.19.9992.1412101744200.92934@planck.local>
On Wed, 2014-12-10 at 18:21 -0500, Benjamin Coddington wrote:
> On Wed, 10 Dec 2014, David Howells wrote:
>
> > Jeff Layton <jeff.layton@primarydata.com> wrote:
> >
> > > > This thread might be interesting:
> > > > https://lkml.org/lkml/2014/11/24/885
> > > >
> > >
> > > Nice. I wasn't aware that Ian was working on this. I'll take a look.
> >
> > I'm not sure what the current state of this is. There was some discussion
> > over how best to determine which container we need to run in - and it's
> > complicated by the fact that the mounter may run in a different container to
> > the program that triggered the mount due to mountpoint propagation.
> >
> > David
>
> The specific problem of how to run /sbin/request-key in the caller's
> "container" for idmap and gssd (and other friends) became more generally a
> problem of how to solve the namespace (or more generally again, "context")
> problem for some users of kmod's call_usermodehelper. The nice thing about
> call_usermodehelper is that you don't have to do a lot of work to set up a
> process to get something done in userspace -- however it is sounding more
> like we do need to work hard to set up context for some users.
>
> The userspace work needs to be done within a context that currently exists
> or once existed, so the questions are where do we get that context and how
> do we keep it around until we need it?
>
> I think there's agreement that the setup of that context should be basically
> what's done in fork() for consistency and future work. So we get LSM and
> cgroups, etc.. in addition to namespaces.
And that's when the usermode helper init function is called, just before
the exec, so I think that's the place it needs to be done.
>
> There are two suggested approaches:
>
> 1) Anytime we think we're going to later need to upcall with a context we
> fork and keep a thread around to do that work. For NFS, that would look
> like forking a thread for every mount at mount time. The user of this API
> would be responsible for creating/maintaining the thread and passing it
> along for work.
Yeah, I don't think that's workable for large numbers of mounts and I
don't think it's really necessary.
>
> 2) Specify that a usermodehelper should attempt to use a context rather than
> the default root context. The context used would be taken from the "init"
> process of the current pid_namespace. Either that init_process itself could
> be asked to fork/execve or when the pid_namespace is created a separate
> helper thread is reserved.
I think this is doable using open()/setns() in a similar way to
nsenter(1). We can worry about simplifying it once we have a viable
approach to work from.
The reality is that now user mode helpers are executed within the root
context of init so I can't see why we can't use the context of init of
the container for this.
Modifying that along the way with a "struct cred" is probably a good
idea although it isn't done now for user mode callbacks. The "struct
cred" of the root init process surely isn't what needs to be used when
executing in a container so something needs to be done. If we duplicate
the same behaviour we have now for execution outside of a container then
we'd use the "struct cred" of the container init process so maybe we do
know where to get the cred, not sure about that though.
>
> I lean toward the second approach because I think it most closely matches
> the context transistions that we have today, and can be more generally
> applied. I'm pecking away at getting a rough implementation, which I plan
> on asking Ian to review initially.
I also have some patches so it's probably a good idea to share, ;)
Ian
next prev parent reply other threads:[~2014-12-11 0:12 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-09 5:40 [PATCH 00/19] gssd improvements David Härdeman
2014-12-09 5:40 ` [PATCH 01/19] nfs-utils: cleanup daemonization code David Härdeman
2014-12-09 5:40 ` [PATCH 02/19] nfs-utils: gssd - merge gssd_main_loop.c and gssd.c David Härdeman
2014-12-09 5:40 ` [PATCH 03/19] nfs-utils: gssd - simplify some option handling David Härdeman
2014-12-09 5:41 ` [PATCH 04/19] nfs-utils: gssd - remove arbitrary GSSD_MAX_CCACHE_SEARCH limitation David Härdeman
2014-12-09 5:41 ` [PATCH 05/19] nfs-utils: gssd - simplify topdirs path David Härdeman
2014-12-09 5:41 ` [PATCH 06/19] nfs-utils: gssd - move over pipfs scanning code David Härdeman
2014-12-09 5:41 ` [PATCH 07/19] nfs-utils: gssd - simplify client dir " David Härdeman
2014-12-09 5:41 ` [PATCH 08/19] nfs-utils: gssd - use libevent David Härdeman
2014-12-09 5:41 ` [PATCH 09/19] nfs-utils: gssd - remove "close me" code David Härdeman
2014-12-09 5:41 ` [PATCH 10/19] nfs-utils: gssd - make the client lists per-topdir David Härdeman
2014-12-09 5:41 ` [PATCH 11/19] nfs-utils: gssd - keep the rpc_pipefs dir open David Härdeman
2014-12-09 5:41 ` [PATCH 12/19] nfs-utils: gssd - use more relative paths David Härdeman
2014-12-09 5:41 ` [PATCH 13/19] nfs-utils: gssd - simplify topdir scanning David Härdeman
2014-12-09 5:41 ` [PATCH 14/19] nfs-utils: gssd - simplify client scanning David Härdeman
2014-12-09 5:41 ` [PATCH 15/19] nfs-utils: gssd - cleanup read_service_info David Härdeman
2014-12-09 5:42 ` [PATCH 16/19] nfs-utils: gssd - change dnotify to inotify David Härdeman
2014-12-09 5:42 ` [PATCH 17/19] nfs-utils: gssd - further shorten some pathnames David Härdeman
2014-12-09 5:42 ` [PATCH 18/19] nfs-utils: gssd - improve inotify David Härdeman
2014-12-09 5:42 ` [PATCH 19/19] nfs-utils: gssd - simplify handle_gssd_upcall David Härdeman
2014-12-09 13:09 ` [PATCH 00/19] gssd improvements Jeff Layton
2014-12-09 13:52 ` David Härdeman
2014-12-09 14:58 ` Jeff Layton
2014-12-09 15:07 ` Simo Sorce
2014-12-09 19:55 ` David Härdeman
2014-12-10 11:52 ` Jeff Layton
2014-12-10 14:08 ` David Härdeman
2014-12-10 14:17 ` Jeff Layton
2014-12-10 14:31 ` David Härdeman
2014-12-10 14:34 ` Jeff Layton
2014-12-10 16:03 ` David Howells
2014-12-10 19:03 ` Jeff Layton
2014-12-10 20:55 ` David Härdeman
2014-12-10 23:44 ` Ian Kent
2014-12-10 23:21 ` Benjamin Coddington
2014-12-11 0:12 ` Ian Kent [this message]
2014-12-11 1:54 ` Benjamin Coddington
2014-12-11 3:21 ` Ian Kent
2014-12-11 11:45 ` Jeff Layton
2014-12-11 12:55 ` Ian Kent
2014-12-11 13:46 ` Jeff Layton
2014-12-11 22:31 ` Ian Kent
2014-12-11 19:32 ` J. Bruce Fields
2014-12-11 19:50 ` Jeff Layton
2014-12-11 19:55 ` J. Bruce Fields
2014-12-11 20:11 ` Jeff Layton
2014-12-11 20:38 ` J. Bruce Fields
2014-12-11 22:20 ` Ian Kent
2014-12-09 16:39 ` Steve Dickson
2014-12-09 20:22 ` David Härdeman
2014-12-09 21:13 ` Steve Dickson
2014-12-10 14:20 ` David Härdeman
2014-12-10 20:35 ` J. Bruce Fields
2014-12-10 20:49 ` David Härdeman
2014-12-10 21:07 ` J. Bruce Fields
2015-01-28 21:29 ` Steve Dickson
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=1418256763.2566.61.camel@pluto.fritz.box \
--to=ikent@redhat.com \
--cc=SteveD@redhat.com \
--cc=bcodding@redhat.com \
--cc=david@hardeman.nu \
--cc=dhowells@redhat.com \
--cc=jeff.layton@primarydata.com \
--cc=linux-nfs@vger.kernel.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.