[CRIU] [PATCH v2 00/36] Nested user namespaces support

Kirill Tkhai ktkhai at virtuozzo.com
Fri Feb 3 08:11:34 PST 2017


Hi,

this is the second version of nested user namespaces support.
There are also a couple of refactoring for pid namespaces
support, which is the thing I'm working at the moment.
In comparation to v1, rewritten almost everything.

The details.
1)User namespaces are generated before tasks. It's need,
because they are not correlated with tasks hierarhy in
any way: parent task may have a user_ns weaker than its
child.

2)NS_ROOT user namespace is created in the moment of clone()
of root_item, while child user_ns are generated from criu
main task. This is made to do child processes not inherite
open ns's file descriptors (so, they do not need close them),
if we'd generate them from root_item.

3)uids/gids/fsuid,fsgid are saved according to NS_ROOT,
if it exists, or NS_CRIU, if not. This is made, because
uid may do not have a mapping in a child user_ns. So,
we choose this format.
In ideally, every xid should be restored in the lowerst
user_ns, where it's mapped, but it's not implemented yet.

4)New format file for saving ns relationships is introduced.
Also, user_ns mappings are moved there. In ideal, other
namespaces should be also.
It's a single file, not an CR_FD_USERNS file for every
user_ns, like we use now.

5)Opening fd's of processes from other user_ns are implemented
using usernsd.

https://travis-ci.org/tkhai/criu/builds/198046261

---

Kirill Tkhai (36):
      files: Fix not populated helper ids
      files: Do not lost original errno value
      zdtm: Add userns00 test
      zdtm: Add userns01 test
      core: Introduce last_pid_mutex and use it to synchronize ns_last_pid assignment
      restore: Implement set_next_pid() helper
      ns: Set nested namespaces hookups
      ns: Set hookups for all namespaces
      ns: Change arguments of dump_user_ns()
      user_ns: Make collect_user_ns() allocate child UsernsEntry mappings
      user_ns: Make host_id() working with any mapping and rename it
      ns: Rename and export userns_id() and INVALID_ID
      ns: Implement target_userns_{u,g}id() and root_userns_{u,g}id()
      ns: Add user, net and pid ns_id on restore
      user_ns: Name loading UsernsEntry mappings on restore "old format"
      ns: Provide the case when root_item has !NS_ROOT user_ns in rst_add_ns_id()
      ns: Set pointer to root_user_ns in ns_ids
      ns: Implement dup_userns_entry()
      images: Move uid_gid_extent and userns_entry desctiptions
      proto: Add ns_hookup_entry description
      ns: Write/read ns entries in new way
      ns: Make prepare_userns() have ns map parameter
      ns: Make write_id_map() use CR_PROC_FD_OFF
      proc: Close CR_PROC_FD_OFF and TRANSPORT_FD_OFF later
      utils: Move getting real pid functionality to separate function
      ns: Add ns_owner
      ns: Generate user_ns tree
      utils: Introduce open_fd_of_real_pid()
      ns: Implement set_user_ns()
      ns: Set target user_ns after create_children_and_session()
      shmem: Fixup shmem_wait_and_open() opens foreign /proc/[pid]/fd/[i]
      rst: Pass pstree_item argument to alloc_groups_copy_creds()
      ns: Dump creds xids in root_user_ns
      ns: Convert task cred's xids to target user ns
      proc: Implement find_vma_size()
      ns: Allow nested user namespaces


 criu/cgroup.c                   |    2 
 criu/cr-dump.c                  |    6 
 criu/cr-restore.c               |  138 ++++---
 criu/files-reg.c                |    3 
 criu/files.c                    |    1 
 criu/image-desc.c               |    1 
 criu/include/cgroup.h           |    2 
 criu/include/image-desc.h       |    1 
 criu/include/magic.h            |    1 
 criu/include/namespaces.h       |   44 ++
 criu/include/parasite-syscall.h |    4 
 criu/include/proc_parse.h       |    1 
 criu/include/protobuf-desc.h    |    1 
 criu/include/pstree.h           |    2 
 criu/include/rst_info.h         |    1 
 criu/include/util.h             |    3 
 criu/namespaces.c               |  809 ++++++++++++++++++++++++++++++++++++---
 criu/parasite-syscall.c         |   42 +-
 criu/pie/restorer.c             |   56 +--
 criu/proc_parse.c               |   34 ++
 criu/protobuf-desc.c            |    2 
 criu/pstree.c                   |   18 +
 criu/shmem.c                    |    4 
 criu/util.c                     |   48 ++
 images/Makefile                 |    1 
 images/ns.proto                 |   29 +
 images/userns.proto             |   12 -
 lib/py/images/images.py         |    1 
 test/zdtm/static/Makefile       |    2 
 test/zdtm/static/userns00.c     |  289 ++++++++++++++
 test/zdtm/static/userns00.desc  |    1 
 test/zdtm/static/userns01.c     |  149 +++++++
 test/zdtm/static/userns01.desc  |    1 
 33 files changed, 1529 insertions(+), 180 deletions(-)
 delete mode 100644 images/userns.proto
 create mode 100644 test/zdtm/static/userns00.c
 create mode 100644 test/zdtm/static/userns00.desc
 create mode 100644 test/zdtm/static/userns01.c
 create mode 100644 test/zdtm/static/userns01.desc

--
Signed-off-by: Kirill Tkhai <ktkhai at virtuozzo.com>


More information about the CRIU mailing list