x86/headers: Make sigcontext pointers bit independent
authorIngo Molnar <mingo@kernel.org>
Sat, 5 Sep 2015 07:32:39 +0000 (09:32 +0200)
committerIngo Molnar <mingo@kernel.org>
Tue, 8 Sep 2015 08:03:58 +0000 (10:03 +0200)
Before we can eliminate the duplication between 'struct
sigcontext_32' and 'struct sigcontext_ia32', make the 'fpstate'
pointer field in 'struct sigcontext_32' bit independent.

Acked-by: Mikko Rapeli <mikko.rapeli@iki.fi>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-kernel@vger.kernel.org
Link: http://lkml.kernel.org/r/1441438363-9999-12-git-send-email-mingo@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
arch/x86/include/uapi/asm/sigcontext.h
arch/x86/kernel/signal.c

index 3591cef6d7d23ffda3267043311dc86764a1718b..d0def259d5459bc505327368963e6c1695d01362 100644 (file)
@@ -218,7 +218,7 @@ struct sigcontext_32 {
         * of extended memory layout. See comments at the definition of
         * (struct _fpx_sw_bytes)
         */
-       void __user                     *fpstate; /* Zero when no FPU/extended context */
+       __u32                           fpstate; /* Zero when no FPU/extended context */
        __u32                           oldmask;
        __u32                           cr2;
 };
@@ -258,7 +258,7 @@ struct sigcontext_64 {
         * of extended memory layout. See comments at the definition of
         * (struct _fpx_sw_bytes)
         */
-       void __user                     *fpstate; /* Zero when no FPU/extended context */
+       __u64                           fpstate; /* Zero when no FPU/extended context */
        __u64                           reserved1[8];
 };
 
index da52e6bb5c7f776d489ee0ebda4d3a7d2cc4f11e..3724ff38033eb7c4bb5273fb69e7607e429a28d7 100644 (file)
@@ -63,6 +63,7 @@
 
 int restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
 {
+       unsigned long buf_val;
        void __user *buf;
        unsigned int tmpflags;
        unsigned int err = 0;
@@ -107,7 +108,8 @@ int restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
                regs->flags = (regs->flags & ~FIX_EFLAGS) | (tmpflags & FIX_EFLAGS);
                regs->orig_ax = -1;             /* disable syscall checks */
 
-               get_user_ex(buf, &sc->fpstate);
+               get_user_ex(buf_val, &sc->fpstate);
+               buf = (void __user *)buf_val;
        } get_user_catch(err);
 
        err |= fpu__restore_sig(buf, config_enabled(CONFIG_X86_32));