}
 
 static int copy_sc_from_user(struct pt_regs *regs,
-                            struct sigcontext __user *from,
-                            struct _fpstate __user *fpp)
+                            struct sigcontext __user *from)
 {
        struct user_i387_struct fp;
+       void __user *buf;
        int err = 0;
 
 #define GETREG(regs, regno, sc, regname)                               \
 
 #undef GETREG
 
-       err = copy_from_user(&fp, fpp, sizeof(struct user_i387_struct));
+       err = __get_user(buf, &from->fpstate);
+       if (err)
+               return 1;
+
+       err = copy_from_user(&fp, buf, sizeof(struct user_i387_struct));
        if (err)
                return 1;
 
        sigdelsetmask(&set, ~_BLOCKABLE);
        set_current_blocked(&set);
 
-       if (copy_sc_from_user(¤t->thread.regs, &uc->uc_mcontext,
-                             &frame->fpstate))
+       if (copy_sc_from_user(¤t->thread.regs, &uc->uc_mcontext))
                goto segfault;
 
        /* Avoid ERESTART handling */