Dave Martin <dave.mar...@arm.com> writes:

> The init task is started with thread_flags equal to 0, which means
> that TIF_FOREIGN_FPSTATE is initially clear.
>
> It is theoretically possible (if unlikely) that the init task could
> reach userspace without ever being scheduled out.  If this occurs,
> data left in the FPSIMD registers by the kernel could be exposed.
>
> This patch fixes this anomaly by ensuring that the init task's
> initial TIF_FOREIGN_FPSTATE is set.
>
> Signed-off-by: Dave Martin <dave.mar...@arm.com>
> Fixes: 005f78cd8849 ("arm64: defer reloading a task's FPSIMD state to 
> userland resume")
> Reviewed-by: Catalin Marinas <catalin.mari...@arm.com>
> Reviewed-by: Alex Bennée <alex.ben...@linaro.org>

Still good ;-)

> Cc: Will Deacon <will.dea...@arm.com>
> Cc: Ard Biesheuvel <ard.biesheu...@linaro.org>
>
> ---
>
> Changes since v10:
>
>  * New patch.
> ---
>  arch/arm64/include/asm/thread_info.h | 13 +++++++------
>  1 file changed, 7 insertions(+), 6 deletions(-)
>
> diff --git a/arch/arm64/include/asm/thread_info.h 
> b/arch/arm64/include/asm/thread_info.h
> index 740aa03c..af271f9 100644
> --- a/arch/arm64/include/asm/thread_info.h
> +++ b/arch/arm64/include/asm/thread_info.h
> @@ -45,12 +45,6 @@ struct thread_info {
>       int                     preempt_count;  /* 0 => preemptable, <0 => bug 
> */
>  };
>
> -#define INIT_THREAD_INFO(tsk)                                                
> \
> -{                                                                    \
> -     .preempt_count  = INIT_PREEMPT_COUNT,                           \
> -     .addr_limit     = KERNEL_DS,                                    \
> -}
> -
>  #define thread_saved_pc(tsk) \
>       ((unsigned long)(tsk->thread.cpu_context.pc))
>  #define thread_saved_sp(tsk) \
> @@ -117,5 +111,12 @@ void arch_release_task_struct(struct task_struct *tsk);
>                                _TIF_SYSCALL_TRACEPOINT | _TIF_SECCOMP | \
>                                _TIF_NOHZ)
>
> +#define INIT_THREAD_INFO(tsk)                                                
> \
> +{                                                                    \
> +     .flags          = _TIF_FOREIGN_FPSTATE,                         \
> +     .preempt_count  = INIT_PREEMPT_COUNT,                           \
> +     .addr_limit     = KERNEL_DS,                                    \
> +}
> +
>  #endif /* __KERNEL__ */
>  #endif /* __ASM_THREAD_INFO_H */


--
Alex Bennée
_______________________________________________
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm

Reply via email to