]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/ppc/kernel/align.c
Pull hp-machvec into release branch
[linux-2.6-omap-h63xx.git] / arch / ppc / kernel / align.c
index 79c92947503771611bfb7f2301f6f191155b7420..ff81da9598d89e61455b3b6d802390c6ed83c89c 100644 (file)
@@ -290,6 +290,10 @@ fix_alignment(struct pt_regs *regs)
                        /* lwm, stmw */
                        nb = (32 - reg) * 4;
                }
+
+               if (!access_ok((flags & ST? VERIFY_WRITE: VERIFY_READ), addr, nb+nb0))
+                       return -EFAULT; /* bad address */
+
                rptr = (unsigned char *) &regs->gpr[reg];
                if (flags & LD) {
                        for (i = 0; i < nb; ++i)
@@ -368,16 +372,24 @@ fix_alignment(struct pt_regs *regs)
 
        /* Single-precision FP load and store require conversions... */
        case LD+F+S:
+#ifdef CONFIG_PPC_FPU
                preempt_disable();
                enable_kernel_fp();
                cvt_fd(&data.f, &data.d, &current->thread.fpscr);
                preempt_enable();
+#else
+               return 0;
+#endif
                break;
        case ST+F+S:
+#ifdef CONFIG_PPC_FPU
                preempt_disable();
                enable_kernel_fp();
                cvt_df(&data.d, &data.f, &current->thread.fpscr);
                preempt_enable();
+#else
+               return 0;
+#endif
                break;
        }