[CRIU] BUG in parasite_infect_seized()

Kirill Tkhai ktkhai at virtuozzo.com
Mon May 23 07:51:24 PDT 2016


On 21.05.2016 00:05, Andrew Vagin wrote:
> On Fri, May 20, 2016 at 03:39:38PM +0300, Kirill Tkhai wrote:
>> Hi,
>>
>> in case of parasite_start_daemon() fail, there is called:
>>
>> parasite_cure_seized()->parasite_cure_remote()->parasite_unmap()->parasite_run() and parasite_stop_on_syscall(),
>>
>> but the tracee is not infected at the moment, and it can't execute remote commands.
>>
>> So, criu fails to unmap memfd.
> 
> I can't understand what you are talking about.
> 
> How can I reproduce this bug?

Hm. Maybe it's not problem. I'll need to recheck again.
 
> I tried to add a new faul, but everything works as expected:
> 
> diff --git a/criu/include/fault-injection.h
> b/criu/include/fault-injection.h
> index f1e5c72..af721ab 100644
> --- a/criu/include/fault-injection.h
> +++ b/criu/include/fault-injection.h
> @@ -7,6 +7,7 @@ enum faults {
>         FI_DUMP_EARLY,
>         FI_RESTORE_ROOT_ONLY,
>         FI_DUMP_PAGES,
> +       FI_PARASITE_START_DAEMON,
>         /* not fatal */
>         FI_CHECK_OPEN_HANDLE = 128,
>         FI_NO_MEMFD = 129,
> diff --git a/criu/parasite-syscall.c b/criu/parasite-syscall.c
> index 214a932..59bbf1f 100644
> --- a/criu/parasite-syscall.c
> +++ b/criu/parasite-syscall.c
> @@ -1415,6 +1415,10 @@ struct parasite_ctl *parasite_infect_seized(pid_t
> pid, struct pstree_item *item,
>                 ctl->r_thread_stack = ctl->remote_map + p;
>         }
>  
> +       if (fault_injected(FI_PARASITE_START_DAEMON)) {
> +               pr_err("\n");
> +               goto err_restore;
> +       }
>         if (parasite_start_daemon(ctl, item))
>                 goto err_restore;
> 
> [root at fc22-vm criu]# python test/zdtm.py run -t zdtm/static/env00 --fault 4 -k always --sbs -f h
> === Run 1/1 ================
> 
> ========================== Run zdtm/static/env00 in h ==========================
> tart test
> ./env00 --pidfile=env00.pid --outfile=env00.out --envname=ENV_00_TEST
> Pause at pre-dump. Press any key to continue.
> Run criu dump
> Forcing 4 fault
> =[log]=> dump/zdtm/static/env00/24/1/dump.log
> ------------------------ grep Error ------------------------
> (00.018147) Error (parasite-syscall.c:1419): 
> (00.018290) Error (cr-dump.c:1228): Can't infect (pid: 24) with parasite
> (00.018711) Error (cr-dump.c:1600): Dumping FAILED.
> ------------------------ ERROR OVER ------------------------
> Pause at pre-restore. Press any key to continue.
> Run criu restore
> Forcing 4 fault
> =[log]=> dump/zdtm/static/env00/24/1/restore.log
> Pause at post-restore. Press any key to continue.
> Wait for zdtm/static/env00 to die for 0.100000
> ========================= Test zdtm/static/env00 PASS ==========================
> 
> [root at fc22-vm ~]# perf trace -fp 14650
>      0.000 ( 0.000 ms):  ... [continued]: futex()) = -1 (null) Unknown error 512
>      7.641 ( 0.053 ms): memfd_create(__syscall_nr: 4194312                                    ) = 3
>     10.097 ( 0.045 ms): mmap(addr: 55872, len: EXEC|READ|WRITE, prot: SHARED, flags: 3</memfd:CRIUMFD (deleted)>, off: 42949672960) = 0x7f693db2d000
>     11.750 ( 0.013 ms): close(__syscall_nr: 3</memfd:CRIUMFD (deleted)>                       ) = 0
>     13.455 ( 0.034 ms): munmap(__syscall_nr: 0x7f693db2d000, addr: 57344, len: 4              ) = 0
> 
>>
>> Kirill
>> _______________________________________________
>> CRIU mailing list
>> CRIU at openvz.org
>> https://lists.openvz.org/mailman/listinfo/criu


More information about the CRIU mailing list