[CRIU] [PATCH] restore/x86: restore_gpregs() needs to initialize ->ss as well
Oleg Nesterov
oleg at redhat.com
Thu Mar 19 09:14:33 PDT 2015
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 at gmail.com>
Signed-off-by: Oleg Nesterov <oleg at redhat.com>
---
arch/x86/crtools.c | 1 +
arch/x86/include/asm/restorer.h | 2 +-
2 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/arch/x86/crtools.c b/arch/x86/crtools.c
index cbbcb9d..29e18d6 100644
--- a/arch/x86/crtools.c
+++ b/arch/x86/crtools.c
@@ -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);
diff --git a/arch/x86/include/asm/restorer.h b/arch/x86/include/asm/restorer.h
index 70199fb..c04fb94 100644
--- a/arch/x86/include/asm/restorer.h
+++ b/arch/x86/include/asm/restorer.h
@@ -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;
--
1.5.5.1
More information about the CRIU
mailing list