linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC PATCH 00/11] Add support for devtmpfs in user namespaces
@ 2014-05-14 21:34 Seth Forshee
  2014-05-14 21:34 ` [RFC PATCH 01/11] driver core: Assign owning user namespace to devices Seth Forshee
                   ` (11 more replies)
  0 siblings, 12 replies; 76+ messages in thread
From: Seth Forshee @ 2014-05-14 21:34 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, Jens Axboe, Arnd Bergmann, Eric Biederman,
	Serge Hallyn, lxc-devel, Seth Forshee

Unpriveleged containers cannot run mknod, making it difficult to support
devices which appear at runtime. Using devtmpfs is one possible
solution, and it would have the added benefit of making container setup
simpler. But simply letting containers mount devtmpfs isn't sufficient
since the container may need to see a different, more limited set of
devices, and because different environments making modifications to
the filesystem could lead to conflicts.

This series solves these problems by assigning devices to user
namespaces. Each device has an "owner" namespace which specifies which
devtmpfs mount the device should appear in as well allowing priveleged
operations on the device from that namespace. This defaults to
init_user_ns. There's also an ns_global flag to indicate a device should
appear in all devtmpfs mounts.

devtmpfs is updated to present a different superblock to each user
namespace. Each super block contains nodes for only global devices and
the devices assigned to the associated namespace.

The implementation isn't complete at this point - it's lacking proper
cleanup when a namespace is no longer in use, and only a sampling of
devices are updated to support use in namespaces. I'm sending the
patches now for feedback on the overall approach and the implementation
so far. I also have a couple of areas where I'd appreciate some
suggestions:

 * If devices are owned by a namespace it might be useful to have this
   awareness for uevents and sysfs as well. Would it make sense to apply
   the ownership to kobjects rather than devices?

 * I'd like to be able to do clean up when a namespace is destroyed,
   e.g. with loop devices I'd probably free up any devices owned by the
   namespace. But that's impossible in the current implementation since
   the device has a reference to the namespace. Any suggestions to get
   around this? I haven't spent much time thinking about it yet, but my
   first thought was to add some kind of weak reference to user
   namespaces. Then when the main reference count hits zero the
   namespace isn't destroyed, but there would be a notification that
   drivers could use to perform cleanup. Once all weak references were
   released the memory would actually be freed.

Thanks,
Seth


Seth Forshee (11):
  driver core: Assign owning user namespace to devices
  driver core: Add device_create_global()
  tmpfs: Add sub-filesystem data pointer to shmem_sb_info
  ramfs: Add sub-filesystem data pointer to ram_fs_info
  devtmpfs: Add support for mounting in user namespaces
  drivers/char/mem.c: Make null/zero/full/random/urandom available to
    user namespaces
  block: Make partitions inherit namespace from whole disk device
  block: Allow blkdev ioctls within user namespaces
  misc: Make loop-control available to all user namespaces
  loop: Assign devices to current_user_ns()
  loop: Allow priveleged operations for root in the namespace which owns
    a device

 block/compat_ioctl.c       |   3 +-
 block/ioctl.c              |  16 +-
 block/partition-generic.c  |   2 +
 drivers/base/core.c        |  54 ++++-
 drivers/base/devtmpfs.c    | 509 ++++++++++++++++++++++++++++++++-------------
 drivers/block/loop.c       |  22 +-
 drivers/char/mem.c         |  28 ++-
 drivers/char/misc.c        |  11 +-
 fs/ramfs/inode.c           |   8 -
 include/linux/device.h     |  18 ++
 include/linux/miscdevice.h |   1 +
 include/linux/ramfs.h      |   9 +
 include/linux/shmem_fs.h   |   1 +
 13 files changed, 499 insertions(+), 183 deletions(-)


^ permalink raw reply	[flat|nested] 76+ messages in thread

end of thread, other threads:[~2014-05-28 20:34 UTC | newest]

Thread overview: 76+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-05-14 21:34 [RFC PATCH 00/11] Add support for devtmpfs in user namespaces Seth Forshee
2014-05-14 21:34 ` [RFC PATCH 01/11] driver core: Assign owning user namespace to devices Seth Forshee
2014-05-14 21:34 ` [RFC PATCH 02/11] driver core: Add device_create_global() Seth Forshee
2014-05-14 21:34 ` [RFC PATCH 03/11] tmpfs: Add sub-filesystem data pointer to shmem_sb_info Seth Forshee
2014-05-14 21:34 ` [RFC PATCH 04/11] ramfs: Add sub-filesystem data pointer to ram_fs_info Seth Forshee
2014-05-14 21:34 ` [RFC PATCH 05/11] devtmpfs: Add support for mounting in user namespaces Seth Forshee
2014-05-14 21:34 ` [RFC PATCH 06/11] drivers/char/mem.c: Make null/zero/full/random/urandom available to " Seth Forshee
2014-05-14 21:34 ` [RFC PATCH 07/11] block: Make partitions inherit namespace from whole disk device Seth Forshee
2014-05-14 21:34 ` [RFC PATCH 08/11] block: Allow blkdev ioctls within user namespaces Seth Forshee
2014-05-14 21:34 ` [RFC PATCH 09/11] misc: Make loop-control available to all " Seth Forshee
2014-05-14 21:34 ` [RFC PATCH 10/11] loop: Assign devices to current_user_ns() Seth Forshee
2014-05-14 21:34 ` [RFC PATCH 11/11] loop: Allow priveleged operations for root in the namespace which owns a device Seth Forshee
2014-05-23  5:48   ` Marian Marinov
2014-05-26  9:16     ` Seth Forshee
2014-05-26 15:32       ` [lxc-devel] " Michael H. Warfield
2014-05-26 15:45         ` Seth Forshee
2014-05-27  1:36         ` Serge E. Hallyn
2014-05-27  2:39           ` Michael H. Warfield
2014-05-27  7:16             ` Seth Forshee
2014-05-27 13:16             ` Serge Hallyn
2014-05-15  1:32 ` [RFC PATCH 00/11] Add support for devtmpfs in user namespaces Greg Kroah-Hartman
2014-05-15  2:17   ` [lxc-devel] " Michael H. Warfield
2014-05-15  3:15     ` Seth Forshee
2014-05-15  4:00       ` Greg Kroah-Hartman
2014-05-15 13:42         ` Michael H. Warfield
2014-05-15 14:08           ` Greg Kroah-Hartman
2014-05-15 17:42             ` Serge Hallyn
2014-05-15 18:12               ` Seth Forshee
2014-05-15 22:15               ` Greg Kroah-Hartman
2014-05-16  1:42                 ` Michael H. Warfield
2014-05-16  7:56                   ` Richard Weinberger
2014-05-16 19:20                   ` James Bottomley
2014-05-16 19:42                     ` Michael H. Warfield
2014-05-16 19:52                       ` [lxc-devel] Mount and other notifiers, was: " James Bottomley
2014-05-16 20:04                         ` Michael H. Warfield
2014-05-16  1:49                 ` [lxc-devel] " Serge Hallyn
2014-05-16  4:35                   ` Greg Kroah-Hartman
2014-05-16 14:06                     ` Seth Forshee
2014-05-16 15:28                       ` Michael H. Warfield
2014-05-16 15:43                         ` Seth Forshee
2014-05-16 18:57                       ` Greg Kroah-Hartman
2014-05-16 19:28                         ` James Bottomley
2014-05-16 20:18                           ` Seth Forshee
2014-05-20  0:04                             ` Eric W. Biederman
2014-05-20  1:14                               ` Michael H. Warfield
2014-05-20 14:18                                 ` Serge Hallyn
2014-05-20 14:21                               ` Seth Forshee
2014-05-21 22:00                                 ` Eric W. Biederman
2014-05-21 22:33                                   ` Serge Hallyn
2014-05-23 22:23                                     ` Eric W. Biederman
2014-05-28  9:26                                       ` Seth Forshee
2014-05-28 13:12                                         ` Serge E. Hallyn
2014-05-28 20:33                                           ` Eric W. Biederman
2014-05-18  2:42                           ` Serge E. Hallyn
2014-05-17  4:31                     ` Eric W. Biederman
2014-05-17 16:01                       ` Seth Forshee
2014-05-18  2:44                         ` Serge E. Hallyn
2014-05-19 13:27                           ` Seth Forshee
2014-05-20 14:15                             ` Serge Hallyn
2014-05-20 14:26                               ` Serge Hallyn
2014-05-17 12:57                     ` Michael H. Warfield
2014-05-15 18:25             ` Richard Weinberger
2014-05-15 19:50               ` Serge Hallyn
2014-05-15 20:13                 ` Richard Weinberger
2014-05-15 20:26                   ` Serge E. Hallyn
2014-05-15 20:33                     ` Richard Weinberger
2014-05-19 20:22                     ` Andy Lutomirski
2014-05-20 14:19                       ` Serge Hallyn
2014-05-23  8:20                         ` Marian Marinov
2014-05-23 13:16                           ` James Bottomley
2014-05-23 16:39                             ` Andy Lutomirski
2014-05-24 22:25                             ` Serge Hallyn
2014-05-25  8:12                               ` James Bottomley
2014-05-25 22:24                                 ` Serge E. Hallyn
2014-05-28  7:02                                   ` James Bottomley
2014-05-28 13:49                                     ` Serge Hallyn

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).