]> git.proxmox.com Git - mirror_lxc.git/commitdiff
c/r: escape cgroups before exec()ing criu
authorTycho Andersen <tycho.andersen@canonical.com>
Tue, 8 Dec 2015 23:08:10 +0000 (16:08 -0700)
committerStéphane Graber <stgraber@ubuntu.com>
Thu, 10 Dec 2015 04:00:23 +0000 (23:00 -0500)
Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
src/lxc/criu.c

index aa1b52ca25faa084a354dcd088492172efcb23e6..6f48493aea85e286e67e1271a74bc9618adec4a8 100644 (file)
@@ -56,6 +56,18 @@ void exec_criu(struct criu_opts *opts)
 
        char buf[4096];
 
+       /* If we are currently in a cgroup /foo/bar, and the container is in a
+        * cgroup /lxc/foo, lxcfs will give us an ENOENT if some task in the
+        * container has an open fd that points to one of the cgroup files
+        * (systemd always opens its "root" cgroup). So, let's escape to the
+        * /actual/ root cgroup so that lxcfs thinks criu has enough rights to
+        * see all cgroups.
+        */
+       if (!cgroup_escape()) {
+               ERROR("failed to escape cgroups");
+               return;
+       }
+
        /* The command line always looks like:
         * criu $(action) --tcp-established --file-locks --link-remap --force-irmap \
         * --manage-cgroups action-script foo.sh -D $(directory) \