Thread (38 messages) 38 messages, 4 authors, 2020-02-17

Re: [PATCH v2 00/28] user_namespace: introduce fsid mappings

From: Christian Brauner <hidden>
Date: 2020-02-17 23:05:36
Also in: linux-fsdevel, linux-security-module, lkml

On Mon, Feb 17, 2020 at 02:35:38PM -0800, James Bottomley wrote:
On Mon, 2020-02-17 at 22:20 +0100, Christian Brauner wrote:
quoted
On Mon, Feb 17, 2020 at 01:06:08PM -0800, James Bottomley wrote:
quoted
On Fri, 2020-02-14 at 19:35 +0100, Christian Brauner wrote:
[...]
quoted
People not as familiar with user namespaces might not be aware
that fsid mappings already exist. Right now, fsid mappings are
always identical to id mappings. Specifically, the kernel will
lookup fsuids in the uid mappings and fsgids in the gid mappings
of the relevant user namespace.
This isn't actually entirely true: today we have the superblock
user namespace, which can be used for fsid remapping on filesystems
that support it (currently f2fs and fuse).  Since this is a single
shift,
Note that this states "the relevant" user namespace not the caller's
user namespace. And the point is true even for such filesystems. fuse
does call make_kuid(fc->user_ns, attr->uid) and hence looks up the
mapping in the id mappings.. This would be replaced by make_kfsuid().
quoted
how is it going to play with s_user_ns?  Do you have to understand
the superblock mapping to use this shift, or are we simply using
this to replace s_user_ns?
I'm not sure what you mean by understand the superblock mapping. The
case is not different from the devpts patch in this series.
So since devpts wasn't originally a s_user_ns consumer, I assume you're
thinking that this patch series just replaces the whole of s_user_ns
for fuse and f2fs and we can remove it?
No, as I said it's just about replacing make_kuid() with make_kfsuid().
This doesn't change anything for all cases where id mappings equal fsid
mappings and if there are separate id mappings it will look at the fsid
mappings for the user namespace in struct fuse_conn.
quoted
Fuse needs to be changed to call make_kfsuid() since it is mountable
inside user namespaces at which point everthing just works.
The fuse case is slightly more complicated because there are sound
reasons to run the daemon in a separate user namespace regardless of
where the end fuse mount is.
I'm curious how you're doing that today as it's usually
tricky to mount across mount namespaces? In any case, this patchset
doesn't change any of that fuse logic, so thing will keep working as
they do today.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help