diff --git a/criu/include/fault-injection.h b/criu/include/fault-injection.h index 5f76bc950..c69a1c928 100644 --- a/criu/include/fault-injection.h +++ b/criu/include/fault-injection.h @@ -6,6 +6,7 @@ enum faults { FI_NONE = 0, FI_DUMP_EARLY, FI_RESTORE_ROOT_ONLY, + FI_DUMP_PAGES, /* not fatal */ FI_CHECK_OPEN_HANDLE = 128, FI_NO_MEMFD = 129, diff --git a/criu/mem.c b/criu/mem.c index a58a87153..becad3284 100644 --- a/criu/mem.c +++ b/criu/mem.c @@ -20,6 +20,7 @@ #include "restorer.h" #include "files-reg.h" #include "pagemap-cache.h" +#include "fault-injection.h" #include "protobuf.h" #include "images/pagemap.pb-c.h" @@ -370,9 +371,18 @@ int parasite_dump_pages_seized(struct parasite_ctl *ctl, return ret; } + if (fault_injected(FI_DUMP_PAGES)) { + pr_err("fault: Dump VMA pages failure!\n"); + return -1; + } + ret = __parasite_dump_pages_seized(ctl, pargs, vma_area_list, pp); - if (ret) + + if (ret) { pr_err("Can't dump page with parasite\n"); + /* Parasite will unprotect VMAs after fail in fini() */ + return ret; + } pargs->add_prot = 0; if (parasite_execute_daemon(PARASITE_CMD_MPROTECT_VMAS, ctl)) { diff --git a/test/jenkins/criu-fault.sh b/test/jenkins/criu-fault.sh index fa2484325..b74566cf5 100755 --- a/test/jenkins/criu-fault.sh +++ b/test/jenkins/criu-fault.sh @@ -4,5 +4,6 @@ source `dirname $0`/criu-lib.sh prep ./test/zdtm.py run -t zdtm/static/env00 --fault 1 --keep-going --report report -f h || fail ./test/zdtm.py run -t zdtm/static/unlink_fstat00 --fault 2 --keep-going --report report -f h || fail +./test/zdtm.py run -t zdtm/static/maps00 --fault 3 --keep-going --report report -f h || fail ./test/zdtm.py run -t zdtm/static/inotify_irmap --fault 128 --keep-going --pre 2 -f uns || fail ./test/zdtm.py run -t zdtm/static/env00 --fault 129 -f uns || fail