diff options
author | Anton Blanchard <anton@samba.org> | 2006-10-12 21:41:00 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-10-16 01:53:30 -0400 |
commit | 6c4841c2b6c32a134f9f36e5e08857138cc12b10 (patch) | |
tree | fbce68fe2e11068f84d4fbd20ed08b3f8a95ab9c | |
parent | 60b2a46cd60c54bd6551ddfa01f0aab08ca58a5d (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.c | 3 |
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 | ||
901 | void altivec_unavailable_exception(struct pt_regs *regs) | 901 | void 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); |