From b5225915df71f0c041cddd1244567dcf3d18fc3f Mon Sep 17 00:00:00 2001 From: Kirill Tkhai Date: Fri, 5 May 2017 19:12:36 +0300 Subject: [PATCH] ns: Do not change net_ns in prepare_net_namespaces() In next patches usernsd will need to create transport socket in the same net_ns as other tasks do their TRANSPORT_FD_OFF sockets. Choose criu net_ns for that: this allows usernsd to do not wait for creation of other net_ns, i.e. to do not introduce new dependencies between tasks. In case of (root_ns_mask & CLONE_NEWUSER) != 0 root_item's user_ns does not allow to restore criu net_ns, so do prepare_net_namespaces() in sub-process to do not lose criu net. v3: Introduce __prepare_net_namespaces and execute it in cloned task. Signed-off-by: Kirill Tkhai Signed-off-by: Andrei Vagin --- criu/net.c | 14 ++++++++++---- test/zdtm/static/tun.desc | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/criu/net.c b/criu/net.c index 9b5f1e492..12f544f35 100644 --- a/criu/net.c +++ b/criu/net.c @@ -2301,13 +2301,10 @@ static int do_create_net_ns(struct ns_id *ns) return 0; } -int prepare_net_namespaces() +static int __prepare_net_namespaces(void *unused) { struct ns_id *nsid; - if (!(root_ns_mask & CLONE_NEWNET)) - return 0; - for (nsid = ns_ids; nsid != NULL; nsid = nsid->next) { if (nsid->nd != &net_ns_desc) continue; @@ -2357,6 +2354,15 @@ err: return -1; } + +int prepare_net_namespaces(void) +{ + if (!(root_ns_mask & CLONE_NEWNET)) + return 0; + + return call_in_child_process(__prepare_net_namespaces, NULL); +} + static int do_restore_task_net_ns(struct ns_id *nsid, struct pstree_item *current) { int fd; diff --git a/test/zdtm/static/tun.desc b/test/zdtm/static/tun.desc index 8c7cfe860..eac32c2d0 100644 --- a/test/zdtm/static/tun.desc +++ b/test/zdtm/static/tun.desc @@ -1 +1 @@ -{'flavor': 'ns uns', 'flags': 'suid', 'feature': 'tun'} +{'flavor': 'ns uns', 'flags': 'suid noauto', 'feature': 'tun'}