mirror of
https://github.com/checkpoint-restore/criu
synced 2025-08-31 06:15:24 +00:00
dump/x86: sanitize the ERESTART_RESTARTBLOCK -> EINTR transition
1. The -ERESTART_RESTARTBLOCK case in get_task_regs() depends on kernel internals too much, and for no reason. We shouldn't rely on fact that a) we are going to do sigreturn() and b) restore_sigcontext() always sets restart_block->fn = do_no_restart_syscall which returns -EINTR. Just change this code to enforce -EINTR after restore, this is what we actually want until we teach criu to handle ERESTART_RESTARTBLOCK. 2. Add pr_warn() to make the potential bug-reports more understandable, a sane application should handle -EINTR correctly but this is not always the case. Signed-off-by: Oleg Nesterov <oleg@redhat.com> Acked-by: Cyrill Gorcunov <gorcunov@openvz.org> Acked-by: Andrew Vagin <avagin@parallels.com> Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
This commit is contained in:
committed by
Pavel Emelyanov
parent
81a4d3b2eb
commit
dd71cca58a
@@ -129,8 +129,8 @@ int get_task_regs(pid_t pid, user_regs_struct_t regs, CoreEntry *core)
|
||||
regs.ip -= 2;
|
||||
break;
|
||||
case -ERESTART_RESTARTBLOCK:
|
||||
regs.ax = __NR_restart_syscall;
|
||||
regs.ip -= 2;
|
||||
pr_warn("Will restore %d with interrupted system call\n", pid);
|
||||
regs.ax = -EINTR;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user