Re: [PATCH v5 4/4] fuse: Allow user namespace mounts
On Wed, Oct 22, 2014 at 5:22 PM, Seth Forshee wrote: > On Wed, Oct 22, 2014 at 02:51:56PM -0700, Andy Lutomirski wrote: >> On Wed, Oct 22, 2014 at 2:24 PM, Seth Forshee >> wrote: >> > Cc: Eric W. Biederman >> > Cc: Serge H. Hallyn >> > Cc: Andy Lutomirski >> > Signed-off-by: Seth Forshee >> > --- >> > fs/fuse/inode.c | 4 ++-- >> > 1 file changed, 2 insertions(+), 2 deletions(-) >> > >> > diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c >> > index b88b5a780228..7d0e73e36e7b 100644 >> > --- a/fs/fuse/inode.c >> > +++ b/fs/fuse/inode.c >> > @@ -1201,7 +1201,7 @@ static void fuse_kill_sb_anon(struct super_block *sb) >> > static struct file_system_type fuse_fs_type = { >> > .owner = THIS_MODULE, >> > .name = "fuse", >> > - .fs_flags = FS_HAS_SUBTYPE, >> > + .fs_flags = FS_HAS_SUBTYPE | FS_USERNS_MOUNT, >> > .mount = fuse_mount, >> > .kill_sb= fuse_kill_sb_anon, >> > }; >> > @@ -1233,7 +1233,7 @@ static struct file_system_type fuseblk_fs_type = { >> > .name = "fuseblk", >> > .mount = fuse_mount_blk, >> > .kill_sb= fuse_kill_sb_blk, >> > - .fs_flags = FS_REQUIRES_DEV | FS_HAS_SUBTYPE, >> > + .fs_flags = FS_REQUIRES_DEV | FS_HAS_SUBTYPE | >> > FS_USERNS_MOUNT, >> > }; >> > MODULE_ALIAS_FS("fuseblk"); >> > >> > -- >> > 1.9.1 >> > >> >> This is mostly a sign of my ignorance, but how does this actually end >> up working? I assume that the mounter opens /dev/fuse and then passes >> the fd to the mount call. Which userns is captured? The opener of >> /dev/fuse or the mounter of the fs? > > You're correct that the mounter passes the fd to /dev/fuse to the mount > call. The namespace of the mounter is used, but there's also a check to > make sure that's the same as that of the opener of /dev/fuse, otherwise > the mount fails. As long as my nodev fix is either applied first or rejected, Acked-by: Andy Lutomirski Although the LSM situation is still a mess. Serge, any thoughts? --Andy > > Seth -- Andy Lutomirski AMA Capital Management, LLC -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH v5 4/4] fuse: Allow user namespace mounts
On Wed, Oct 22, 2014 at 02:51:56PM -0700, Andy Lutomirski wrote: > On Wed, Oct 22, 2014 at 2:24 PM, Seth Forshee > wrote: > > Cc: Eric W. Biederman > > Cc: Serge H. Hallyn > > Cc: Andy Lutomirski > > Signed-off-by: Seth Forshee > > --- > > fs/fuse/inode.c | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c > > index b88b5a780228..7d0e73e36e7b 100644 > > --- a/fs/fuse/inode.c > > +++ b/fs/fuse/inode.c > > @@ -1201,7 +1201,7 @@ static void fuse_kill_sb_anon(struct super_block *sb) > > static struct file_system_type fuse_fs_type = { > > .owner = THIS_MODULE, > > .name = "fuse", > > - .fs_flags = FS_HAS_SUBTYPE, > > + .fs_flags = FS_HAS_SUBTYPE | FS_USERNS_MOUNT, > > .mount = fuse_mount, > > .kill_sb= fuse_kill_sb_anon, > > }; > > @@ -1233,7 +1233,7 @@ static struct file_system_type fuseblk_fs_type = { > > .name = "fuseblk", > > .mount = fuse_mount_blk, > > .kill_sb= fuse_kill_sb_blk, > > - .fs_flags = FS_REQUIRES_DEV | FS_HAS_SUBTYPE, > > + .fs_flags = FS_REQUIRES_DEV | FS_HAS_SUBTYPE | > > FS_USERNS_MOUNT, > > }; > > MODULE_ALIAS_FS("fuseblk"); > > > > -- > > 1.9.1 > > > > This is mostly a sign of my ignorance, but how does this actually end > up working? I assume that the mounter opens /dev/fuse and then passes > the fd to the mount call. Which userns is captured? The opener of > /dev/fuse or the mounter of the fs? You're correct that the mounter passes the fd to /dev/fuse to the mount call. The namespace of the mounter is used, but there's also a check to make sure that's the same as that of the opener of /dev/fuse, otherwise the mount fails. Seth -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH v5 4/4] fuse: Allow user namespace mounts
On Wed, Oct 22, 2014 at 2:24 PM, Seth Forshee wrote: > Cc: Eric W. Biederman > Cc: Serge H. Hallyn > Cc: Andy Lutomirski > Signed-off-by: Seth Forshee > --- > fs/fuse/inode.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c > index b88b5a780228..7d0e73e36e7b 100644 > --- a/fs/fuse/inode.c > +++ b/fs/fuse/inode.c > @@ -1201,7 +1201,7 @@ static void fuse_kill_sb_anon(struct super_block *sb) > static struct file_system_type fuse_fs_type = { > .owner = THIS_MODULE, > .name = "fuse", > - .fs_flags = FS_HAS_SUBTYPE, > + .fs_flags = FS_HAS_SUBTYPE | FS_USERNS_MOUNT, > .mount = fuse_mount, > .kill_sb= fuse_kill_sb_anon, > }; > @@ -1233,7 +1233,7 @@ static struct file_system_type fuseblk_fs_type = { > .name = "fuseblk", > .mount = fuse_mount_blk, > .kill_sb= fuse_kill_sb_blk, > - .fs_flags = FS_REQUIRES_DEV | FS_HAS_SUBTYPE, > + .fs_flags = FS_REQUIRES_DEV | FS_HAS_SUBTYPE | FS_USERNS_MOUNT, > }; > MODULE_ALIAS_FS("fuseblk"); > > -- > 1.9.1 > This is mostly a sign of my ignorance, but how does this actually end up working? I assume that the mounter opens /dev/fuse and then passes the fd to the mount call. Which userns is captured? The opener of /dev/fuse or the mounter of the fs? --Andy -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH v5 4/4] fuse: Allow user namespace mounts
On Wed, Oct 22, 2014 at 02:51:56PM -0700, Andy Lutomirski wrote: On Wed, Oct 22, 2014 at 2:24 PM, Seth Forshee seth.fors...@canonical.com wrote: Cc: Eric W. Biederman ebied...@xmission.com Cc: Serge H. Hallyn serge.hal...@ubuntu.com Cc: Andy Lutomirski l...@amacapital.net Signed-off-by: Seth Forshee seth.fors...@canonical.com --- fs/fuse/inode.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c index b88b5a780228..7d0e73e36e7b 100644 --- a/fs/fuse/inode.c +++ b/fs/fuse/inode.c @@ -1201,7 +1201,7 @@ static void fuse_kill_sb_anon(struct super_block *sb) static struct file_system_type fuse_fs_type = { .owner = THIS_MODULE, .name = fuse, - .fs_flags = FS_HAS_SUBTYPE, + .fs_flags = FS_HAS_SUBTYPE | FS_USERNS_MOUNT, .mount = fuse_mount, .kill_sb= fuse_kill_sb_anon, }; @@ -1233,7 +1233,7 @@ static struct file_system_type fuseblk_fs_type = { .name = fuseblk, .mount = fuse_mount_blk, .kill_sb= fuse_kill_sb_blk, - .fs_flags = FS_REQUIRES_DEV | FS_HAS_SUBTYPE, + .fs_flags = FS_REQUIRES_DEV | FS_HAS_SUBTYPE | FS_USERNS_MOUNT, }; MODULE_ALIAS_FS(fuseblk); -- 1.9.1 This is mostly a sign of my ignorance, but how does this actually end up working? I assume that the mounter opens /dev/fuse and then passes the fd to the mount call. Which userns is captured? The opener of /dev/fuse or the mounter of the fs? You're correct that the mounter passes the fd to /dev/fuse to the mount call. The namespace of the mounter is used, but there's also a check to make sure that's the same as that of the opener of /dev/fuse, otherwise the mount fails. Seth -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH v5 4/4] fuse: Allow user namespace mounts
On Wed, Oct 22, 2014 at 5:22 PM, Seth Forshee seth.fors...@canonical.com wrote: On Wed, Oct 22, 2014 at 02:51:56PM -0700, Andy Lutomirski wrote: On Wed, Oct 22, 2014 at 2:24 PM, Seth Forshee seth.fors...@canonical.com wrote: Cc: Eric W. Biederman ebied...@xmission.com Cc: Serge H. Hallyn serge.hal...@ubuntu.com Cc: Andy Lutomirski l...@amacapital.net Signed-off-by: Seth Forshee seth.fors...@canonical.com --- fs/fuse/inode.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c index b88b5a780228..7d0e73e36e7b 100644 --- a/fs/fuse/inode.c +++ b/fs/fuse/inode.c @@ -1201,7 +1201,7 @@ static void fuse_kill_sb_anon(struct super_block *sb) static struct file_system_type fuse_fs_type = { .owner = THIS_MODULE, .name = fuse, - .fs_flags = FS_HAS_SUBTYPE, + .fs_flags = FS_HAS_SUBTYPE | FS_USERNS_MOUNT, .mount = fuse_mount, .kill_sb= fuse_kill_sb_anon, }; @@ -1233,7 +1233,7 @@ static struct file_system_type fuseblk_fs_type = { .name = fuseblk, .mount = fuse_mount_blk, .kill_sb= fuse_kill_sb_blk, - .fs_flags = FS_REQUIRES_DEV | FS_HAS_SUBTYPE, + .fs_flags = FS_REQUIRES_DEV | FS_HAS_SUBTYPE | FS_USERNS_MOUNT, }; MODULE_ALIAS_FS(fuseblk); -- 1.9.1 This is mostly a sign of my ignorance, but how does this actually end up working? I assume that the mounter opens /dev/fuse and then passes the fd to the mount call. Which userns is captured? The opener of /dev/fuse or the mounter of the fs? You're correct that the mounter passes the fd to /dev/fuse to the mount call. The namespace of the mounter is used, but there's also a check to make sure that's the same as that of the opener of /dev/fuse, otherwise the mount fails. As long as my nodev fix is either applied first or rejected, Acked-by: Andy Lutomirski l...@amacapital.net Although the LSM situation is still a mess. Serge, any thoughts? --Andy Seth -- Andy Lutomirski AMA Capital Management, LLC -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH v5 4/4] fuse: Allow user namespace mounts
On Wed, Oct 22, 2014 at 2:24 PM, Seth Forshee seth.fors...@canonical.com wrote: Cc: Eric W. Biederman ebied...@xmission.com Cc: Serge H. Hallyn serge.hal...@ubuntu.com Cc: Andy Lutomirski l...@amacapital.net Signed-off-by: Seth Forshee seth.fors...@canonical.com --- fs/fuse/inode.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c index b88b5a780228..7d0e73e36e7b 100644 --- a/fs/fuse/inode.c +++ b/fs/fuse/inode.c @@ -1201,7 +1201,7 @@ static void fuse_kill_sb_anon(struct super_block *sb) static struct file_system_type fuse_fs_type = { .owner = THIS_MODULE, .name = fuse, - .fs_flags = FS_HAS_SUBTYPE, + .fs_flags = FS_HAS_SUBTYPE | FS_USERNS_MOUNT, .mount = fuse_mount, .kill_sb= fuse_kill_sb_anon, }; @@ -1233,7 +1233,7 @@ static struct file_system_type fuseblk_fs_type = { .name = fuseblk, .mount = fuse_mount_blk, .kill_sb= fuse_kill_sb_blk, - .fs_flags = FS_REQUIRES_DEV | FS_HAS_SUBTYPE, + .fs_flags = FS_REQUIRES_DEV | FS_HAS_SUBTYPE | FS_USERNS_MOUNT, }; MODULE_ALIAS_FS(fuseblk); -- 1.9.1 This is mostly a sign of my ignorance, but how does this actually end up working? I assume that the mounter opens /dev/fuse and then passes the fd to the mount call. Which userns is captured? The opener of /dev/fuse or the mounter of the fs? --Andy -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/