[RFC PATCH v2 01/13] powerpc/radix: Make kuap_check_amr() and kuap_restore_amr() generic

Nicholas Piggin npiggin at gmail.com
Mon Apr 6 11:40:46 AEST 2020


Christophe Leroy's on April 6, 2020 3:44 am:
> In preparation of porting powerpc32 to C syscall entry/exit,
> rename kuap_check_amr() and kuap_restore_amr() as kuap_check()
> and kuap_restore(), and move the stub for when CONFIG_PPC_KUAP is
> not selected in the generic asm/kup.h

I have no problem with this,

Reviewed-by: Nicholas Piggin <npiggin at gmail.com>

> 
> Signed-off-by: Christophe Leroy <christophe.leroy at c-s.fr>
> ---
>  arch/powerpc/include/asm/book3s/64/kup-radix.h | 12 ++----------
>  arch/powerpc/include/asm/kup.h                 |  2 ++
>  arch/powerpc/kernel/syscall_64.c               | 10 +++++-----
>  3 files changed, 9 insertions(+), 15 deletions(-)
> 
> diff --git a/arch/powerpc/include/asm/book3s/64/kup-radix.h b/arch/powerpc/include/asm/book3s/64/kup-radix.h
> index 3bcef989a35d..1f2716a0dcd8 100644
> --- a/arch/powerpc/include/asm/book3s/64/kup-radix.h
> +++ b/arch/powerpc/include/asm/book3s/64/kup-radix.h
> @@ -60,13 +60,13 @@
>  #include <asm/mmu.h>
>  #include <asm/ptrace.h>
>  
> -static inline void kuap_restore_amr(struct pt_regs *regs)
> +static inline void kuap_restore(struct pt_regs *regs)
>  {
>  	if (mmu_has_feature(MMU_FTR_RADIX_KUAP))
>  		mtspr(SPRN_AMR, regs->kuap);
>  }
>  
> -static inline void kuap_check_amr(void)
> +static inline void kuap_check(void)
>  {
>  	if (IS_ENABLED(CONFIG_PPC_KUAP_DEBUG) && mmu_has_feature(MMU_FTR_RADIX_KUAP))
>  		WARN_ON_ONCE(mfspr(SPRN_AMR) != AMR_KUAP_BLOCKED);
> @@ -141,14 +141,6 @@ bad_kuap_fault(struct pt_regs *regs, unsigned long address, bool is_write)
>  		    (regs->kuap & (is_write ? AMR_KUAP_BLOCK_WRITE : AMR_KUAP_BLOCK_READ)),
>  		    "Bug: %s fault blocked by AMR!", is_write ? "Write" : "Read");
>  }
> -#else /* CONFIG_PPC_KUAP */
> -static inline void kuap_restore_amr(struct pt_regs *regs)
> -{
> -}
> -
> -static inline void kuap_check_amr(void)
> -{
> -}
>  #endif /* CONFIG_PPC_KUAP */
>  
>  #endif /* __ASSEMBLY__ */
> diff --git a/arch/powerpc/include/asm/kup.h b/arch/powerpc/include/asm/kup.h
> index 92bcd1a26d73..1100c13b6d9e 100644
> --- a/arch/powerpc/include/asm/kup.h
> +++ b/arch/powerpc/include/asm/kup.h
> @@ -62,6 +62,8 @@ bad_kuap_fault(struct pt_regs *regs, unsigned long address, bool is_write)
>  {
>  	return false;
>  }
> +static inline void kuap_restore(struct pt_regs *regs) { }
> +static inline void kuap_check(void) { }
>  #endif /* CONFIG_PPC_KUAP */
>  
>  static inline void allow_read_from_user(const void __user *from, unsigned long size)
> diff --git a/arch/powerpc/kernel/syscall_64.c b/arch/powerpc/kernel/syscall_64.c
> index cf06eb443a80..72f3d2f0a823 100644
> --- a/arch/powerpc/kernel/syscall_64.c
> +++ b/arch/powerpc/kernel/syscall_64.c
> @@ -2,7 +2,7 @@
>  
>  #include <linux/err.h>
>  #include <asm/asm-prototypes.h>
> -#include <asm/book3s/64/kup-radix.h>
> +#include <asm/kup.h>
>  #include <asm/cputime.h>
>  #include <asm/hw_irq.h>
>  #include <asm/kprobes.h>
> @@ -48,7 +48,7 @@ notrace long system_call_exception(long r3, long r4, long r5,
>  	}
>  #endif
>  
> -	kuap_check_amr();
> +	kuap_check();
>  
>  	/*
>  	 * This is not required for the syscall exit path, but makes the
> @@ -206,7 +206,7 @@ notrace unsigned long syscall_exit_prepare(unsigned long r3,
>  	local_paca->tm_scratch = regs->msr;
>  #endif
>  
> -	kuap_check_amr();
> +	kuap_check();
>  
>  	account_cpu_user_exit();
>  
> @@ -294,7 +294,7 @@ notrace unsigned long interrupt_exit_user_prepare(struct pt_regs *regs, unsigned
>  	local_paca->tm_scratch = regs->msr;
>  #endif
>  
> -	kuap_check_amr();
> +	kuap_check();
>  
>  	account_cpu_user_exit();
>  
> @@ -372,7 +372,7 @@ notrace unsigned long interrupt_exit_kernel_prepare(struct pt_regs *regs, unsign
>  	 * We don't need to restore AMR on the way back to userspace for KUAP.
>  	 * The value of AMR only matters while we're in the kernel.
>  	 */
> -	kuap_restore_amr(regs);
> +	kuap_restore(regs);
>  
>  	return ret;
>  }
> -- 
> 2.25.0
> 
> 


More information about the Linuxppc-dev mailing list