iwmmxt signal frame handling
Nicolas Pitre
nicolas.pitre at linaro.org
Fri Oct 15 00:15:44 EDT 2010
On Thu, 14 Oct 2010, Arnd Bergmann wrote:
> Peter Maydell noticed during code review that the signal frame might
> be written incorrectly for kernels with CONFIG_IWMMXT set running
> processes without TIF_USING_IWMMXT, where the magic/size values
> for the iwmmxt section of the frame are left uninitialized.
> Instead of skipping this part of the frame, we should instead
> write a valid header with zero data.
>
> This patch is compile-tested only since the problem was only
> found in review and neither Peter nor myself have access to
> IWMMXT capable hardware to test this on.
>
> Signed-off-by: Arnd Bergmann <arnd at arndb.de>
> Reported-by: Peter Maydell <peter.maydell at linaro.org>
Acked-by: Nicolas Pitre <nicolas.pitre at linaro.org>
>
> --- a/arch/arm/kernel/signal.c
> +++ b/arch/arm/kernel/signal.c
> @@ -154,7 +154,10 @@ static int preserve_iwmmxt_context(struct iwmmxt_sigframe *frame)
> kframe = (struct iwmmxt_sigframe *)((unsigned long)(kbuf + 8) & ~7);
> kframe->magic = IWMMXT_MAGIC;
> kframe->size = IWMMXT_STORAGE_SIZE;
> - iwmmxt_task_copy(current_thread_info(), &kframe->storage);
> + if (test_thread_flag(TIF_USING_IWMMXT))
> + iwmmxt_task_copy(current_thread_info(), &kframe->storage);
> + else
> + memset(&kframe->storage, 0, sizeof(kframe->storage));
> return __copy_to_user(frame, kframe, sizeof(*frame));
> }
>
> @@ -429,7 +432,7 @@ setup_sigframe(struct sigframe __user *sf, struct pt_regs *regs, sigset_t *set)
> err |= preserve_crunch_context(&aux->crunch);
> #endif
> #ifdef CONFIG_IWMMXT
> - if (err == 0 && test_thread_flag(TIF_USING_IWMMXT))
> + if (err == 0)
> err |= preserve_iwmmxt_context(&aux->iwmmxt);
> #endif
> #ifdef CONFIG_VFP
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>
More information about the linux-arm-kernel
mailing list