• Kinsbursky Stanislav's avatar
    restorer: close log file before detaching from crtools · acf604c6
    Kinsbursky Stanislav authored
    v2: it's toom risky to jump to address equal to line numbet (there could be
    valid executable code). So now jump is done to 0 address and %sp encodes line
    number (32 most significant bits) and error code (32 least significant bits).
    
    There is a race between log close by process being restoring and opened file
    desctriptors check in zdtm test suite - crtools can exit and compare file
    descriptors before detached restored process will perform all the rest tasks
    (including close of the log) and execute final system call:
    
     |--- dump/sleeping00/8578/dump.fd        2012-02-20 14:31:31.246096000 +0300
     |+++ dump/sleeping00/8578/restore.fd     2012-02-20 14:31:31.418095999 +0300
     |@@ -1,4 +1,5 @@
     |
     | 0 -> /dev/null
     | 1 -> /dev/null
     |+1023 -> /root/crtools/test/dump/sleeping00/8578/restore.log
     | 2 -> /dev/null
    
    The solution is to close log in restorer before final command received. But
    this leads to another problem: we have to inform somehow about possible errors
    afterwards This is done by forced segmentation fault and looks like this
    (dmesg):
    
    pipe00[4678]: segfault at 0 ip 00007f4c8ab77d02 sp 000002ed00000001 error 4
    
    Where %sp encodes line number (32 most significant bits) and error code (32
    least significant bits).
    Signed-off-by: 's avatarStanislav Kinsbursky <skinsbursky@openvz.org>
    Acked-by: 's avatarPavel Emelyanov <xemul@parallels.com>
    Signed-off-by: 's avatarCyrill Gorcunov <gorcunov@openvz.org>
    acf604c6
Name
Last commit
Last update
Documentation Loading commit data...
include Loading commit data...
test Loading commit data...
tools Loading commit data...
.gitignore Loading commit data...
COPYING Loading commit data...
Makefile Loading commit data...
Makefile.inc Loading commit data...
README Loading commit data...
cr-dump.c Loading commit data...
cr-restore.c Loading commit data...
cr-show.c Loading commit data...
crtools.c Loading commit data...
files.c Loading commit data...
gen-offsets.sh Loading commit data...
ipc_ns.c Loading commit data...
libnetlink.c Loading commit data...
log.c Loading commit data...
namespaces.c Loading commit data...
parasite-syscall.c Loading commit data...
parasite.c Loading commit data...
parasite.lds.S Loading commit data...
proc_parse.c Loading commit data...
ptrace.c Loading commit data...
restorer-log.c Loading commit data...
restorer.c Loading commit data...
restorer.lds.S Loading commit data...
sockets.c Loading commit data...
sysctl.c Loading commit data...
util-net.c Loading commit data...
util.c Loading commit data...
uts_ns.c Loading commit data...