aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Blanchard <anton@samba.org>2006-10-12 21:41:00 -0400
committerPaul Mackerras <paulus@samba.org>2006-10-16 01:53:30 -0400
commit6c4841c2b6c32a134f9f36e5e08857138cc12b10 (patch)
treefbce68fe2e11068f84d4fbd20ed08b3f8a95ab9c
parent60b2a46cd60c54bd6551ddfa01f0aab08ca58a5d (diff)
[POWERPC] Never panic when taking altivec exceptions from userspace
At the moment we rely on a cpu feature bit or a firmware property to detect altivec. If we dont have either of these and the cpu does in fact support altivec we can cause a panic from userspace. It seems safer to always send a signal if we manage to get an 0xf20 exception from userspace. Signed-off-by: Anton Blanchard <anton@samba.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
-rw-r--r--arch/powerpc/kernel/traps.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
index d9f10f2fc372..5ed4c2ceb5ca 100644
--- a/arch/powerpc/kernel/traps.c
+++ b/arch/powerpc/kernel/traps.c
@@ -900,14 +900,13 @@ void kernel_fp_unavailable_exception(struct pt_regs *regs)
900 900
901void altivec_unavailable_exception(struct pt_regs *regs) 901void altivec_unavailable_exception(struct pt_regs *regs)
902{ 902{
903#if !defined(CONFIG_ALTIVEC)
904 if (user_mode(regs)) { 903 if (user_mode(regs)) {
905 /* A user program has executed an altivec instruction, 904 /* A user program has executed an altivec instruction,
906 but this kernel doesn't support altivec. */ 905 but this kernel doesn't support altivec. */
907 _exception(SIGILL, regs, ILL_ILLOPC, regs->nip); 906 _exception(SIGILL, regs, ILL_ILLOPC, regs->nip);
908 return; 907 return;
909 } 908 }
910#endif 909
911 printk(KERN_EMERG "Unrecoverable VMX/Altivec Unavailable Exception " 910 printk(KERN_EMERG "Unrecoverable VMX/Altivec Unavailable Exception "
912 "%lx at %lx\n", regs->trap, regs->nip); 911 "%lx at %lx\n", regs->trap, regs->nip);
913 die("Unrecoverable VMX/Altivec Unavailable Exception", regs, SIGABRT); 912 die("Unrecoverable VMX/Altivec Unavailable Exception", regs, SIGABRT);