[CRIU] [PATCH v2] zdtm: add maps_file_prot

Andrew Vagin avagin at parallels.com
Fri Apr 4 00:38:14 PDT 2014


Acked-by: Andrew Vagin <avagin at parallels.com>

On Thu, Apr 03, 2014 at 03:04:46PM -0700, Jamie Liu wrote:
> Tests for the bugs fixed by "criu: fix filemap open permissions".
> 
> Signed-off-by: Jamie Liu <jamieliu at google.com>
> ---
>  test/zdtm.sh                           |  1 +
>  test/zdtm/live/static/Makefile         |  1 +
>  test/zdtm/live/static/maps_file_prot.c | 53 ++++++++++++++++++++++++++++++++++
>  3 files changed, 55 insertions(+)
>  create mode 100644 test/zdtm/live/static/maps_file_prot.c
> 
> diff --git a/test/zdtm.sh b/test/zdtm.sh
> index d7f8fca..a8e6e2f 100755
> --- a/test/zdtm.sh
> +++ b/test/zdtm.sh
> @@ -12,6 +12,7 @@ static/maps00
>  static/maps01
>  static/maps02
>  static/maps04
> +static/maps_file_prot
>  static/mprotect00
>  static/mtime_mmap
>  static/sleeping00
> diff --git a/test/zdtm/live/static/Makefile b/test/zdtm/live/static/Makefile
> index 77e8788..baeedcd 100644
> --- a/test/zdtm/live/static/Makefile
> +++ b/test/zdtm/live/static/Makefile
> @@ -140,6 +140,7 @@ TST_FILE	=				\
>  		file_locks00			\
>  		file_locks01			\
>  		netns-nf			\
> +		maps_file_prot			\
>  
>  TST_DIR		=				\
>  		cwd00				\
> diff --git a/test/zdtm/live/static/maps_file_prot.c b/test/zdtm/live/static/maps_file_prot.c
> new file mode 100644
> index 0000000..570191f
> --- /dev/null
> +++ b/test/zdtm/live/static/maps_file_prot.c
> @@ -0,0 +1,53 @@
> +#include <errno.h>
> +#include <fcntl.h>
> +#include <unistd.h>
> +#include <sys/mman.h>
> +#include <sys/stat.h>
> +#include <sys/types.h>
> +#include <linux/limits.h>
> +#include "zdtmtst.h"
> +
> +const char *test_doc	= "Test mappings of same file with different prot";
> +const char *test_author	= "Jamie Liu <jamieliu at google.com>";
> +
> +char *filename;
> +TEST_OPTION(filename, string, "file name", 1);
> +
> +#define die(fmt, arg...) do { err(fmt, ## arg); return 1; } while (0)
> +
> +int main(int argc, char ** argv)
> +{
> +	void *ro_map, *rw_map;
> +	int fd;
> +
> +	test_init(argc, argv);
> +
> +	fd = open(filename, O_RDWR | O_CREAT, 0644);
> +	if (fd < 0)
> +		die("open failed");
> +	if (ftruncate(fd, 2 * PAGE_SIZE))
> +		die("ftruncate failed");
> +
> +	ro_map = mmap(NULL, 2 * PAGE_SIZE, PROT_READ, MAP_SHARED, fd, 0);
> +	if (ro_map == MAP_FAILED)
> +		die("mmap failed");
> +	rw_map = ro_map + PAGE_SIZE;
> +	if (mprotect(rw_map, PAGE_SIZE, PROT_READ | PROT_WRITE))
> +		die("mprotect failed");
> +
> +	close(fd);
> +
> +	test_daemon();
> +	test_waitsig();
> +
> +	/* Check that rw_map is still writeable */
> +	*(volatile char *)rw_map = 1;
> +
> +	if (mprotect(ro_map, PAGE_SIZE, PROT_READ | PROT_WRITE)) {
> +		fail("mprotect after restore failed");
> +		return 1;
> +	}
> +
> +	pass();
> +	return 0;
> +}
> -- 
> 1.9.1.423.g4596e3a
> 


More information about the CRIU mailing list