[CRIU] Problem using libcriu's criu_restore()

Tycho Andersen tycho.andersen at canonical.com
Thu Jul 31 08:14:47 PDT 2014


Hi Ruslan

On Thu, Jul 31, 2014 at 06:07:41PM +0300, Ruslan Kuprieiev wrote:
> Hi Tycho,
> 
> So did restore succeed?

No, it dies before it ever sends the request and the server just
gives:

Error (cr-service.c:504): Can't recv request: Connection reset by peer

I'm investigating with valgrind now. For what its worth, the message
header and everything looks fine before it goes into protobuf, but
valgrind is complaining about the protobuf functions reading
uninitialized memory, so something is clearly amiss.

Tycho

> On 31.07.2014 17:17, Tycho Andersen wrote:
> >Hi all,
> >
> >I'm having a problem using libcriu's criu_restore() function; it seems
> >bad things are happening when criu is trying to send the restore
> >request:
> >
> >lxc-restore: google/protobuf-c/protobuf-c.c:480: protobuf_c_message_get_packed_size: Assertion `((message)->descriptor)->magic == 0x28aaeef9' failed.
> >
> >In particular, the stack trace is:
> >
> >#0  0x00007ffff77d8f79 in __GI_raise (sig=sig at entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
> >#1  0x00007ffff77dc388 in __GI_abort () at abort.c:89
> >#2  0x00007ffff77d1e36 in __assert_fail_base (fmt=0x7ffff7923718 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion at entry=0x7ffff5a64c28 "((message)->descriptor)->magic == 0x28aaeef9",
> >     file=file at entry=0x7ffff5a64b98 "google/protobuf-c/protobuf-c.c", line=line at entry=480, function=function at entry=0x7ffff5a65640 "protobuf_c_message_get_packed_size") at assert.c:92
> >#3  0x00007ffff77d1ee2 in __GI___assert_fail (assertion=0x7ffff5a64c28 "((message)->descriptor)->magic == 0x28aaeef9", file=0x7ffff5a64b98 "google/protobuf-c/protobuf-c.c", line=480,
> >     function=0x7ffff5a65640 "protobuf_c_message_get_packed_size") at assert.c:101
> >#4  0x00007ffff5a5fb98 in protobuf_c_message_get_packed_size () from /usr/lib/x86_64-linux-gnu/libprotobuf-c.so.0
> >#5  0x00007ffff5a5f8e2 in protobuf_c_message_get_packed_size () from /usr/lib/x86_64-linux-gnu/libprotobuf-c.so.0
> >#6  0x00007ffff5a5fdc6 in ?? () from /usr/lib/x86_64-linux-gnu/libprotobuf-c.so.0
> >#7  0x00007ffff5a5f65b in protobuf_c_message_get_packed_size () from /usr/lib/x86_64-linux-gnu/libprotobuf-c.so.0
> >#8  0x00007ffff6d5081a in send_req () from /usr/local/lib/x86_64-linux-gnu/libcriu.so.1
> >#9  0x00007ffff6d50939 in send_req_and_recv_resp_sk () from /usr/local/lib/x86_64-linux-gnu/libcriu.so.1
> >#10 0x00007ffff6d50b32 in send_req_and_recv_resp.constprop () from /usr/local/lib/x86_64-linux-gnu/libcriu.so.1
> >#11 0x00007ffff6d51448 in criu_restore () from /usr/local/lib/x86_64-linux-gnu/libcriu.so.1
> >#12 0x00007ffff7baf7f5 in lxcapi_restore (c=0x6035a0, directory=0x6032d0 "/tmp/checkpoint", service_address=<optimized out>) at lxccontainer.c:3613
> >#13 0x0000000000400971 in main (argc=<optimized out>, argv=<optimized out>) at lxc_restore.c:98
> >
> >A little bit of googling says that this means we are constructing an invalid
> >message and libprotobuf is rejecting it. However, criu_dump() seems to work
> >just fine and as near as I can tell there isn't any significant difference
> >between the two calls.
> >
> >Thoughts?
> >
> >Thanks,
> >
> >Tycho
> >_______________________________________________
> >CRIU mailing list
> >CRIU at openvz.org
> >https://lists.openvz.org/mailman/listinfo/criu
> 


More information about the CRIU mailing list