[CRIU] Problem using libcriu's criu_restore()

Tycho Andersen tycho.andersen at canonical.com
Thu Jul 31 07:17:11 PDT 2014


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


More information about the CRIU mailing list