iwmmxt signal frame handling

Eric Miao eric.y.miao at gmail.com
Fri Oct 15 05:17:41 EDT 2010


On Thu, Oct 14, 2010 at 10:09 PM, Arnd Bergmann <arnd at arndb.de> 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>

Looks OK to me as well.

Acked-by: Eric Miao <eric.y.miao at gmail.com>

>
> --- 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
>



More information about the linux-arm-kernel mailing list