x86: signal: cosmetic unification of restore_sigcontext()
PATCH 1/1 x86: signal: cosmetic unification of restore_sigcontext()
From: Hiroshi Shimamoto <[email protected]>
Make restore_sigcontext() same.
Signed-off-by Hiroshi Shimamoto <[email protected]>
--- arch/x86/kernel/signal_32.c | 22 ++++++++++++++++++++++ arch/x86/kernel/signal_64.c | 15 +++++++++++++++ 2 files changed, 37 insertions(+), 0 deletions(-)
arch/x86/kernel/signal_32.c +22 -0
@@ -149,14 +149,36 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc,/* Always make any pending restarted system calls return -EINTR */ current_thread_info ()->restart_block.fn = do_no_restart_syscall; +#ifdef CONFIG_X86_32 GET_SEG (gs);COPY_SEG (fs);COPY_SEG (es);COPY_SEG (ds); +#endif /* CONFIG_X86_32 */ +COPY (di);COPY (si);COPY (bp);COPY (sp);COPY (bx);COPY (dx);COPY (cx);COPY (ip); + +#ifdef CONFIG_X86_64 +COPY (r8); +COPY (r9); +COPY (r10); +COPY (r11); +COPY (r12); +COPY (r13); +COPY (r14); +COPY (r15); +#endif /* CONFIG_X86_64 */ + +#ifdef CONFIG_X86_32 COPY_SEG_STRICT (cs);COPY_SEG_STRICT (ss); +#else /* !CONFIG_X86_32 */ +/* Kernel saves and restores only the CS segment register on signals, +* which is the bare minimum needed to allow mixed 32/64-bit code. +* App's signal handler can save/restore other segments if needed. */ +COPY_SEG_STRICT (cs); +#endif /* CONFIG_X86_32 */ err |=__get_user (tmpflags, &sc->flags); regs->flags = (regs->flags & ~FIX_EFLAGS ) | (tmpflags &FIX_EFLAGS );
arch/x86/kernel/signal_64.c +15 -0
@@ -76,8 +76,17 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc,/* Always make any pending restarted system calls return -EINTR */ current_thread_info ()->restart_block.fn = do_no_restart_syscall; +#ifdef CONFIG_X86_32 +GET_SEG (gs); +COPY_SEG (fs); +COPY_SEG (es); +COPY_SEG (ds); +#endif /* CONFIG_X86_32 */ +COPY (di);COPY (si);COPY (bp);COPY (sp);COPY (bx);COPY (dx);COPY (cx);COPY (ip); + +#ifdef CONFIG_X86_64 COPY (r8);COPY (r9);COPY (r10);
@@ -86,11 +95,17 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc,COPY (r13);COPY (r14);COPY (r15); +#endif /* CONFIG_X86_64 */ +#ifdef CONFIG_X86_32 +COPY_SEG_STRICT (cs); +COPY_SEG_STRICT (ss); +#else /* !CONFIG_X86_32 */ /* Kernel saves and restores only the CS segment register on signals, * which is the bare minimum needed to allow mixed 32/64-bit code. * App's signal handler can save/restore other segments if needed. */ COPY_SEG_STRICT (cs); +#endif /* CONFIG_X86_32 */ err |=__get_user (tmpflags, &sc->flags); regs->flags = (regs->flags & ~FIX_EFLAGS ) | (tmpflags &FIX_EFLAGS );
Signature · 1 line
1.5.6
Ingo Molnar
AppliedQuoted 9 lines · Hiroshi Shimamoto
From: Hiroshi Shimamoto <[email protected]>
Make
restore_sigcontext()same.Signed-off-by Hiroshi Shimamoto <[email protected]>--- arch/x86/kernel/signal_32.c | 22 ++++++++++++++++++++++ arch/x86/kernel/signal_64.c | 15 +++++++++++++++ 2 files changed, 37 insertions(+), 0 deletions(-)
applied to tip/x86/signal, thanks!
Ingo