Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932763AbbLBPmI (ORCPT ); Wed, 2 Dec 2015 10:42:08 -0500 Received: from mail-ig0-f173.google.com ([209.85.213.173]:35793 "EHLO mail-ig0-f173.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752769AbbLBPmC (ORCPT ); Wed, 2 Dec 2015 10:42:02 -0500 From: Seth Forshee To: "Eric W. Biederman" , linux-bcache@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-mtd@lists.infradead.org, linux-fsdevel@vger.kernel.org, fuse-devel@lists.sourceforge.net, linux-security-module@vger.kernel.org, selinux@tycho.nsa.gov Cc: Alexander Viro , Serge Hallyn , Richard Weinberger , Austin S Hemmelgarn , Miklos Szeredi , linux-kernel@vger.kernel.org, Seth Forshee Subject: [PATCH 00/19] Support fuse mounts in user namespaces Date: Wed, 2 Dec 2015 09:40:00 -0600 Message-Id: <1449070821-73820-1-git-send-email-seth.forshee@canonical.com> X-Mailer: git-send-email 1.9.1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4470 Lines: 97 These patches implement support for mounting filesystems in user namespaces using fuse. I've sent the full set of patches this time because I feel that previous discussions could have benefited from more context. I've also dropped any patches from my previous postings not specifically required for fuse mounts. These are based on the patches in the for-testing branch of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace.git, but I've rebased them onto 4.4-rc3. I've pushed all of this to: git://git.kernel.org/pub/scm/linux/kernel/git/sforshee/linux.git fuse-userns The patches are organized into three high-level groups. Patches 1-6 are related to security, adding restrictions for unprivileged mounts and updating the LSMs as needed. Patches 1-2 (checking inode permissions for block device mounts) may not be strictly necessary for fuseblk mounts since fuse doesn't do any IO on the block device in the kernel, but it still seems like a good idea to fail the mount if the user doesn't have the required permissions for the inode (though this is a bit misleading with fuse since the mounts are done via a suid-root helper). Patches 7-15 update most of the vfs to translate ids correctly and deal with inodes which may have invalid user/group ids. I've omitted patches for anything not used by fuse - quota, fs freezing, some helper functions, etc. - but if these are wanted for the sake of completeness I can include them. Patches 16-19 update fuse to deal with mounts from non-init pid and user namespaces and enable mounting from user namespaces. Thanks, Seth Andy Lutomirski (1): fs: Treat foreign mounts as nosuid Seth Forshee (18): block_dev: Support checking inode permissions in lookup_bdev() block_dev: Check permissions towards block device inode when mounting selinux: Add support for unprivileged mounts from user namespaces userns: Replace in_userns with current_in_userns Smack: Handle labels consistently in untrusted mounts fs: Check for invalid i_uid in may_follow_link() cred: Reject inodes with invalid ids in set_create_file_as() fs: Refuse uid/gid changes which don't map into s_user_ns fs: Update posix_acl support to handle user namespace mounts fs: Ensure the mounter of a filesystem is privileged towards its inodes fs: Don't remove suid for CAP_FSETID in s_user_ns fs: Allow superblock owner to access do_remount_sb() fs: Permit FIBMAP for users with CAP_SYS_RAWIO in s_user_ns capabilities: Allow privileged user in s_user_ns to set file caps fuse: Add support for pid namespaces fuse: Support fuse filesystems outside of init_user_ns fuse: Restrict allow_other to the superblock's namespace or a descendant fuse: Allow user namespace mounts drivers/md/bcache/super.c | 2 +- drivers/md/dm-table.c | 2 +- drivers/mtd/mtdsuper.c | 2 +- fs/attr.c | 11 +++++ fs/block_dev.c | 18 ++++++-- fs/exec.c | 2 +- fs/fuse/cuse.c | 3 +- fs/fuse/dev.c | 26 +++++++++--- fs/fuse/dir.c | 91 ++++++++++++++++++++++++++-------------- fs/fuse/file.c | 22 +++++++--- fs/fuse/fuse_i.h | 18 +++++--- fs/fuse/inode.c | 92 ++++++++++++++++++++++++++++++----------- fs/inode.c | 6 ++- fs/ioctl.c | 2 +- fs/namei.c | 2 +- fs/namespace.c | 17 +++++++- fs/posix_acl.c | 67 +++++++++++++++++++----------- fs/quota/quota.c | 2 +- fs/xattr.c | 19 ++++++--- include/linux/fs.h | 2 +- include/linux/mount.h | 1 + include/linux/posix_acl_xattr.h | 17 ++++++-- include/linux/uidgid.h | 10 +++++ include/linux/user_namespace.h | 6 +-- kernel/capability.c | 13 ++++-- kernel/cred.c | 2 + kernel/user_namespace.c | 6 +-- security/commoncap.c | 16 ++++--- security/selinux/hooks.c | 25 ++++++++++- security/smack/smack_lsm.c | 29 ++++++++----- 30 files changed, 386 insertions(+), 145 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/