[CRIU] [PATCH] restore/x86: restore_gpregs() needs to initialize ->ss as well
Andrey Wagin
avagin at gmail.com
Thu Mar 19 13:26:55 PDT 2015
2015-03-19 19:14 GMT+03:00 Oleg Nesterov <oleg at redhat.com>:
> 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>
Acked-by: Andrew Vagin <avagin at openvz.org>
Thanks!
> ---
> 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