[PATCH] powerpc: Never handle VSX alignment exceptions from kernel
Michael Neuling
mikey at neuling.org
Tue Aug 20 20:04:09 EST 2013
On Tue, Aug 20, 2013 at 4:05 PM, Anton Blanchard <anton at samba.org> wrote:
>
> The VSX alignment handler needs to write out the existing VSX
> state to memory before operating on it (flush_vsx_to_thread()).
> If we take a VSX alignment exception in the kernel bad things
> will happen. It looks like we could write the kernel state out
> to the user process, or we could handle the kernel exception
> using data from the user process (depending if MSR_VSX is set
> or not).
>
> Worse still, if the code to read or write the VSX state causes an
> alignment exception, we will recurse forever. I ended up with
> hundreds of megabytes of kernel stack to look through as a result.
>
> Floating point and SPE code have similar issues but already include
> a user check. Add the same check to emulate_vsx().
>
Can you say what will happen when you apply this patch. ie It
produces one oops rather than megabytes of crap making it easier
to debug.
Also, can you give a clue as to how you can hit this since it should
never happen in the first place. I assume it's some LE corner case...
Mikey
> Signed-off-by: Anton Blanchard <anton at samba.org>
> ---
>
> Index: b/arch/powerpc/kernel/align.c
> ===================================================================
> --- a/arch/powerpc/kernel/align.c
> +++ b/arch/powerpc/kernel/align.c
> @@ -651,6 +651,10 @@ static int emulate_vsx(unsigned char __u
> int sw = 0;
> int i, j;
>
> + /* userland only */
> + if (unlikely(!user_mode(regs)))
> + return 0;
> +
> flush_vsx_to_thread(current);
>
> if (reg < 32)
>
More information about the Linuxppc-dev
mailing list