lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <53962765-53b9-dfdc-a5b2-a3133a924c12@arm.com>
Date:   Thu, 21 Oct 2021 15:33:01 +0100
From:   James Clark <james.clark@....com>
To:     Leo Yan <leo.yan@...aro.org>,
        Catalin Marinas <catalin.marinas@....com>,
        Will Deacon <will@...nel.org>,
        Mark Rutland <mark.rutland@....com>,
        Kees Cook <keescook@...omium.org>,
        Ard Biesheuvel <ardb@...nel.org>,
        Sami Tolvanen <samitolvanen@...gle.com>,
        Nicholas Piggin <npiggin@...il.com>,
        James Morse <james.morse@....com>,
        Marc Zyngier <maz@...nel.org>, Joey Gouly <joey.gouly@....com>,
        Peter Collingbourne <pcc@...gle.com>,
        Vincenzo Frascino <vincenzo.frascino@....com>,
        "Peter Zijlstra (Intel)" <peterz@...radead.org>,
        Stephane Eranian <eranian@...gle.com>,
        linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org
Subject: Re: [RFCv1 1/4] arm64: Use static key for tracing PID in CONTEXTIDR



On 21/10/2021 14:45, Leo Yan wrote:
> The kernel provides CONFIG_PID_IN_CONTEXTIDR for tracing PID into system
> register CONTEXTIDR; we need to statically enable this configuration
> when build kernel image to use this feature.
> 
> On the other hand, hardware tracing modules (e.g. Arm CoreSight, SPE,
> etc) rely on this feature to provide context info in their tracing data.
> If kernel has not enabled configuration CONFIG_PID_IN_CONTEXTIDR, then
> tracing modules have no chance to capture PID related info.
> 
> This patch introduces static key for tracing PID in CONTEXTIDR, it
> provides a possibility for device driver to dynamically enable and
> disable tracing PID into CONTEXTIDR as needed.
> 
> As the first step, the kernel increases the static key if
> CONFIG_PID_IN_CONTEXTIDR is enabled when booting kernel, in this case
> kernel will always trace PID into CONTEXTIDR at the runtime.  This means
> before and after applying this patch, the semantics for
> CONFIG_PID_IN_CONTEXTIDR are consistent.
> 
> Signed-off-by: Leo Yan <leo.yan@...aro.org>
> ---
>  arch/arm64/include/asm/mmu_context.h |  4 +++-
>  arch/arm64/kernel/process.c          | 11 +++++++++++
>  2 files changed, 14 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm64/include/asm/mmu_context.h b/arch/arm64/include/asm/mmu_context.h
> index f4ba93d4ffeb..e1f33616f83a 100644
> --- a/arch/arm64/include/asm/mmu_context.h
> +++ b/arch/arm64/include/asm/mmu_context.h
> @@ -26,9 +26,11 @@
>  
>  extern bool rodata_full;
>  
> +DECLARE_STATIC_KEY_FALSE(contextidr_in_use);
> +
>  static inline void contextidr_thread_switch(struct task_struct *next)
>  {
> -	if (!IS_ENABLED(CONFIG_PID_IN_CONTEXTIDR))
> +	if (!static_branch_unlikely(&contextidr_in_use))
>  		return;
>  
>  	write_sysreg(task_pid_nr(next), contextidr_el1);
> diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
> index 40adb8cdbf5a..d744c0c7e4c4 100644
> --- a/arch/arm64/kernel/process.c
> +++ b/arch/arm64/kernel/process.c
> @@ -61,6 +61,9 @@ unsigned long __stack_chk_guard __ro_after_init;
>  EXPORT_SYMBOL(__stack_chk_guard);
>  #endif
>  
> +DEFINE_STATIC_KEY_FALSE(contextidr_in_use);
> +EXPORT_SYMBOL_GPL(contextidr_in_use);
> +
>  /*
>   * Function pointers to optional machine specific functions
>   */
> @@ -721,3 +724,11 @@ int arch_elf_adjust_prot(int prot, const struct arch_elf_state *state,
>  	return prot;
>  }
>  #endif
> +
> +static int __init contextidr_init(void)
> +{
> +	if (IS_ENABLED(CONFIG_PID_IN_CONTEXTIDR))
> +		static_branch_inc(&contextidr_in_use);
> +	return 0;
> +}
> +early_initcall(contextidr_init);

Hi Leo,

Can you skip this early_initcall() part if you do something like this:

    DECLARE_STATIC_KEY_MAYBE(CONFIG_PID_IN_CONTEXTIDR, contextidr_in_use)

It seems like there is a way to conditionally initialise it to true.

James

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ