[CRIU] [PATCH v2] zdtm: add maps_file_prot
Jamie Liu
jamieliu at google.com
Thu Apr 3 15:04:46 PDT 2014
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