2
0
mirror of https://github.com/checkpoint-restore/criu synced 2025-08-31 06:15:24 +00:00

restore/x86: restore_gpregs() needs to initialize ->ss as well

Before the recent "x86_64,signal: Fix SS handling for signals delivered
to 64-bit programs" kernel patch, sigreturn paths forgot to restore ->ss
after return from the signal handler.

Now that the kernel was fixed, restore_gpregs() has to initialize ->ss
too, it is no longer ignored.

Note: this is the minimal fix. In the long term we probably should not
dump/restore the segment registers at all. We can use sigcontext filled
by the target kernel and modify the general-purpose regs.

Reported-and-tested-by: Andrey Wagin <avagin@gmail.com>
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Acked-by: Cyrill Gorcunov <gorcunov@openvz.org>
Acked-by: Andrew Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
This commit is contained in:
Oleg Nesterov
2015-03-19 19:14:00 +03:00
committed by Pavel Emelyanov
parent 044011e579
commit 07dcf0dbb6
2 changed files with 2 additions and 1 deletions

View File

@@ -475,6 +475,7 @@ int restore_gpregs(struct rt_sigframe *f, UserX86RegsEntry *r)
CPREG2(rip, ip);
CPREG2(eflags, flags);
CPREG1(cs);
CPREG1(ss);
CPREG1(gs);
CPREG1(fs);

View File

@@ -53,7 +53,7 @@ struct rt_sigcontext {
unsigned short cs;
unsigned short gs;
unsigned short fs;
unsigned short __pad0;
unsigned short ss;
unsigned long err;
unsigned long trapno;
unsigned long oldmask;