• 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
restorer.c 19 KB