mirror of
https://github.com/checkpoint-restore/criu
synced 2025-09-01 06:45:35 +00:00
mount: clone a mount namespace to open a detached mount
If we can't create a temporary directory for a detached mount, we can clone a whole mount namespace, open a mount and release the created namespace. The result will be the same. https://jira.sw.ru/browse/PSBM-57135 https://github.com/opencontainers/runc/issues/1202 travis-ci: success for A few fixes to c/r a docker container with a console (rev3) Signed-off-by: Andrei Vagin <avagin@virtuozzo.com> Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
This commit is contained in:
19
criu/mount.c
19
criu/mount.c
@@ -1091,10 +1091,23 @@ int open_mountpoint(struct mount_info *pm)
|
||||
goto out;
|
||||
|
||||
mnt_path = get_clean_mnt(pm, mnt_path_tmp, mnt_path_root);
|
||||
if (mnt_path == NULL)
|
||||
goto out;
|
||||
if (mnt_path == NULL) {
|
||||
/*
|
||||
* We probably can't create a temporary direcotry,
|
||||
* so we can try to clone the mount namespace, open
|
||||
* the required mount and destroy this mount namespace
|
||||
* by calling restore_ns() below in this function.
|
||||
*/
|
||||
if (unshare(CLONE_NEWNS)) {
|
||||
pr_perror("Unable to clone a mount namespace");
|
||||
goto out;
|
||||
}
|
||||
|
||||
fd = open_detach_mount(mnt_path);
|
||||
fd = open(pm->mountpoint, O_RDONLY | O_DIRECTORY, 0);
|
||||
if (fd < 0)
|
||||
pr_perror("Can't open directory %s: %d", pm->mountpoint, fd);
|
||||
} else
|
||||
fd = open_detach_mount(mnt_path);
|
||||
if (fd < 0)
|
||||
goto out;
|
||||
|
||||
|
Reference in New Issue
Block a user