[PATCH v2 2/2] powerpc/hibernate: PPC64 fix user threads access to kernel space

Wang Dongsheng-B40534 B40534 at freescale.com
Sun Jun 9 21:31:00 EST 2013


Sorry, Please ignore this patch.
This is replaced.
Replace by: http://patchwork.ozlabs.org/patch/250033/

- dongsheng

> -----Original Message-----
> From: Wang Dongsheng-B40534
> Sent: Sunday, June 09, 2013 1:23 PM
> To: benh at kernel.crashing.org; johannes at sipsolutions.net; anton at enomsg.org
> Cc: Wood Scott-B07421; galak at kernel.crashing.org; linuxppc-
> dev at lists.ozlabs.org; Wang Dongsheng-B40534
> Subject: [PATCH v2 2/2] powerpc/hibernate: PPC64 fix user threads access
> to kernel space
> 
> If PID is used in the TLB, after hibernation resume, the user
> threads will access to kernel space.
> 
> We must restore PID register, because TLB will use PID. The
> hibernation suspend flow is trapped from user space to kernel
> space, the PID register is user thread pid.
> 
> The hibernation resume is begin in kernel start flow, the PID
> alway 0. After the kernel thread back to user thread, there is
> not have context switch and the pid can not update, because the
> kernel thread is trapped form user space. So if we did't restore
> PID the user space of thread will be addressing in the kernel
> space.
> 
> There are two ways to restore PID:
> 1/ In swsusp_arch_suspend/swsusp_arch_resume, save/resotre PID register.
> 2/ Form restore_processor_state to restore. this function will
>    do context switch.
>    switch_mmu_context(current->active_mm, current->active_mm)
> 
> PPC32 Using the second method. For consistency reason, PPC64 using
> the same way.
> 
> Signed-off-by: Wang Dongsheng <dongsheng.wang at freescale.com>
> ---
>  arch/powerpc/kernel/swsusp.c | 2 --
>  1 file changed, 2 deletions(-)
> 
> diff --git a/arch/powerpc/kernel/swsusp.c b/arch/powerpc/kernel/swsusp.c
> index eae33e1..1930e44 100644
> --- a/arch/powerpc/kernel/swsusp.c
> +++ b/arch/powerpc/kernel/swsusp.c
> @@ -32,7 +32,5 @@ void save_processor_state(void)
> 
>  void restore_processor_state(void)
>  {
> -#ifdef CONFIG_PPC32
>  	switch_mmu_context(current->active_mm, current->active_mm);
> -#endif
>  }
> --
> 1.8.0




More information about the Linuxppc-dev mailing list