[CRIU] [PATCH 2/2] zdtm/mnt_ext_*: don't affect the host mount namespace

Tycho Andersen tycho.andersen at canonical.com
Wed May 25 06:34:22 PDT 2016


On Wed, May 25, 2016 at 12:29:38AM +0300, Andrey Vagin wrote:
> From: Andrew Vagin <avagin at virtuozzo.com>
> 
> Currently all test mounts are mounted in the host mount namespace,
> so on restore we get root with some mounts.
> 
> Cc: Tycho Andersen <tycho.andersen at canonical.com>

Acked-by: Tycho Andersen <tycho.andersen at canonical.com>

Thanks!

> Signed-off-by: Andrew Vagin <avagin at virtuozzo.com>
> ---
>  test/zdtm/static/mnt_ext_auto.c   | 56 +++++++++++++++++++++------------------
>  test/zdtm/static/mnt_ext_master.c | 49 ++++++++++++++--------------------
>  2 files changed, 50 insertions(+), 55 deletions(-)
> 
> diff --git a/test/zdtm/static/mnt_ext_auto.c b/test/zdtm/static/mnt_ext_auto.c
> index 4a931b9..42fb363 100644
> --- a/test/zdtm/static/mnt_ext_auto.c
> +++ b/test/zdtm/static/mnt_ext_auto.c
> @@ -1,3 +1,5 @@
> +#define _GNU_SOURCE
> +#include <sched.h>
>  #include <sys/mount.h>
>  #include <unistd.h>
>  #include <sys/stat.h>
> @@ -9,8 +11,8 @@
>  
>  #include "zdtmtst.h"
>  
> -const char *test_doc	= "Run busy loop while migrating";
> -const char *test_author	= "Roman Kagan <rkagan at parallels.com>";
> +const char *test_doc	= "Check --mnt-ext-map auto";
> +const char *test_author	= "Andrew Vagin <avagin at gmail.com>";
>  
>  char *dirname = "mnt_ext_auto.test";
>  TEST_OPTION(dirname, string, "directory name", 1);
> @@ -19,8 +21,7 @@ int main(int argc, char ** argv)
>  {
>  	char src[PATH_MAX], dst[PATH_MAX], *root;
>  	char *dname = "/tmp/zdtm_ext_auto.XXXXXX";
> -	int status;
> -	pid_t pid;
> +	struct stat sta, stb;
>  
>  	root = getenv("ZDTM_ROOT");
>  	if (root == NULL) {
> @@ -28,42 +29,45 @@ int main(int argc, char ** argv)
>  		return 1;
>  	}
>  
> -	sprintf(dst, "%s/ext_mounts", getenv("ZDTM_ROOT"));
> +	sprintf(dst, "%s/%s", get_current_dir_name(), dirname);
>  
>  	if (strcmp(getenv("ZDTM_NEWNS"), "1"))
>  		goto test;
>  
> -	pid = fork();
> -	if (pid < 0)
> +	mkdir(dname, 755);
> +	sprintf(src, "%s/test", dname);
> +	if (mount("zdtm_auto_ext_mnt", dname, "tmpfs", 0, NULL)) {
> +		pr_perror("mount");
>  		return 1;
> -	if (pid == 0) {
> -		test_ext_init(argc, argv);
> -
> -		mkdir(dname, 755);
> -		sprintf(src, "%s/test", dname);
> -		if (mount("zdtm_auto_ext_mnt", dname, "tmpfs", 0, NULL)) {
> -			pr_perror("mount");
> -			return 1;
> -		}
> -		mkdir(src, 755);
> -		mkdir(dst, 755);
> -		if (mount(src, dst, NULL, MS_BIND, NULL)) {
> -			pr_perror("bind");
> -			return 1;
> -		}
> -		return 0;
>  	}
> +	mkdir(src, 755);
>  
> -	wait(&status);
> -	if (status != 0)
> +	unshare(CLONE_NEWNS);
> +	mkdir(dst, 755);
> +	if (mount(src, dst, NULL, MS_BIND, NULL)) {
> +		pr_perror("bind");
>  		return 1;
> -
> +	}
>  test:
>  	test_init(argc, argv);
>  
> +	if (stat(dirname, &stb)) {
> +		pr_perror("stat");
> +		sleep(100);
> +		return 1;
> +	}
> +
>  	test_daemon();
>  	test_waitsig();
>  
> +	if (stat(dirname, &sta)) {
> +		pr_perror("stat");
> +		return 1;
> +	}
> +	if (sta.st_dev != stb.st_dev) {
> +		fail();
> +		return 1;
> +	}
>  
>  	pass();
>  
> diff --git a/test/zdtm/static/mnt_ext_master.c b/test/zdtm/static/mnt_ext_master.c
> index 290868e..c0ef7ad 100644
> --- a/test/zdtm/static/mnt_ext_master.c
> +++ b/test/zdtm/static/mnt_ext_master.c
> @@ -1,3 +1,6 @@
> +#define _GNU_SOURCE
> +#include <sched.h>
> +
>  #include <sys/mount.h>
>  #include <unistd.h>
>  #include <sys/stat.h>
> @@ -19,8 +22,6 @@ int main(int argc, char ** argv)
>  {
>  	char src[PATH_MAX], dst[PATH_MAX], *root;
>  	char *dname = "/tmp/zdtm_ext_auto.XXXXXX";
> -	int status;
> -	pid_t pid;
>  
>  	root = getenv("ZDTM_ROOT");
>  	if (root == NULL) {
> @@ -33,37 +34,27 @@ int main(int argc, char ** argv)
>  	if (strcmp(getenv("ZDTM_NEWNS"), "1"))
>  		goto test;
>  
> -	pid = fork();
> -	if (pid < 0)
> +	mkdir(dname, 755);
> +	sprintf(src, "%s/test", dname);
> +	if (mount("zdtm_auto_ext_mnt", dname, "tmpfs", 0, NULL)) {
> +		pr_perror("mount");
>  		return 1;
> -	if (pid == 0) {
> -		test_ext_init(argc, argv);
> -
> -		mkdir(dname, 755);
> -		sprintf(src, "%s/test", dname);
> -		if (mount("zdtm_auto_ext_mnt", dname, "tmpfs", 0, NULL)) {
> -			pr_perror("mount");
> -			return 1;
> -		}
> -
> -		mkdir(src, 755);
> -		mkdir(dst, 755);
> -		if (mount(src, dst, NULL, MS_BIND, NULL)) {
> -			pr_perror("bind");
> -			return 1;
> -		}
> -
> -		if (mount(src, dst, NULL, MS_SLAVE, NULL)) {
> -			pr_perror("slave");
> -			return 1;
> -		}
> -
> -		return 0;
>  	}
>  
> -	wait(&status);
> -	if (status != 0)
> +	mkdir(src, 755);
> +	mkdir(dst, 755);
> +
> +	unshare(CLONE_NEWNS);
> +
> +	if (mount(src, dst, NULL, MS_BIND, NULL)) {
> +		pr_perror("bind");
>  		return 1;
> +	}
> +
> +	if (mount(src, dst, NULL, MS_SLAVE, NULL)) {
> +		pr_perror("slave");
> +		return 1;
> +	}
>  
>  test:
>  	test_init(argc, argv);
> -- 
> 2.7.4
> 


More information about the CRIU mailing list