linux-arch.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Mark Rutland <mark.rutland@arm.com>
To: Sami Tolvanen <samitolvanen@google.com>
Cc: Kees Cook <keescook@chromium.org>,
	Nathan Chancellor <nathan@kernel.org>,
	Nick Desaulniers <ndesaulniers@google.com>,
	Masahiro Yamada <masahiroy@kernel.org>,
	Will Deacon <will@kernel.org>, Jessica Yu <jeyu@kernel.org>,
	Arnd Bergmann <arnd@arndb.de>, Tejun Heo <tj@kernel.org>,
	"Paul E. McKenney" <paulmck@kernel.org>,
	Christoph Hellwig <hch@infradead.org>,
	Peter Zijlstra <peterz@infradead.org>,
	bpf@vger.kernel.org, linux-hardening@vger.kernel.org,
	linux-arch@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
	linux-kbuild@vger.kernel.org, linux-pci@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 12/17] arm64: implement __va_function
Date: Thu, 25 Mar 2021 10:37:57 +0000	[thread overview]
Message-ID: <20210325103757.GD36570@C02TD0UTHF1T.local> (raw)
In-Reply-To: <20210323203946.2159693-13-samitolvanen@google.com>

On Tue, Mar 23, 2021 at 01:39:41PM -0700, Sami Tolvanen wrote:
> With CONFIG_CFI_CLANG, the compiler replaces function addresses in
> instrumented C code with jump table addresses. This change implements
> the __va_function() macro, which returns the actual function address
> instead.
> 
> Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
> Reviewed-by: Kees Cook <keescook@chromium.org>

Is there really no attribute or builtin that can be used to do this
without assembly?

IIUC from other patches the symbol tables will contain the "real"
non-cfi entry points (unless we explciitly asked to make the jump table
address canonical), so AFAICT here the compiler should have all the
necessary information to generate either the CFI or non-CFI entry point
addresses, even if it doesn't expose an interface for that today.

It'd be a lot nicer if we could get the compiler to do this for us.

Thanks,
Mark.

> ---
>  arch/arm64/include/asm/memory.h | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
> 
> diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h
> index 0aabc3be9a75..9a4887808681 100644
> --- a/arch/arm64/include/asm/memory.h
> +++ b/arch/arm64/include/asm/memory.h
> @@ -321,6 +321,21 @@ static inline void *phys_to_virt(phys_addr_t x)
>  #define virt_to_pfn(x)		__phys_to_pfn(__virt_to_phys((unsigned long)(x)))
>  #define sym_to_pfn(x)		__phys_to_pfn(__pa_symbol(x))
>  
> +#ifdef CONFIG_CFI_CLANG
> +/*
> + * With CONFIG_CFI_CLANG, the compiler replaces function address
> + * references with the address of the function's CFI jump table
> + * entry. The __va_function macro always returns the address of the
> + * actual function instead.
> + */
> +#define __va_function(x) ({						\
> +	void *addr;							\
> +	asm("adrp %0, " __stringify(x) "\n\t"				\
> +	    "add  %0, %0, :lo12:" __stringify(x) : "=r" (addr));	\
> +	addr;								\
> +})
> +#endif
> +
>  /*
>   *  virt_to_page(x)	convert a _valid_ virtual address to struct page *
>   *  virt_addr_valid(x)	indicates whether a virtual address is valid
> -- 
> 2.31.0.291.g576ba9dcdaf-goog
> 

  reply	other threads:[~2021-03-25 10:38 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-23 20:39 [PATCH v3 00/17] Add support for Clang CFI Sami Tolvanen
2021-03-23 20:39 ` [PATCH v3 01/17] add " Sami Tolvanen
2021-03-23 20:39 ` [PATCH v3 02/17] cfi: add __cficanonical Sami Tolvanen
2021-03-24 15:31   ` Rasmus Villemoes
2021-03-24 16:38     ` Sami Tolvanen
2021-03-23 20:39 ` [PATCH v3 03/17] mm: add generic __va_function and __pa_function macros Sami Tolvanen
2021-03-24  7:13   ` Christoph Hellwig
2021-03-24 15:54     ` Sami Tolvanen
2021-03-25 10:16       ` Mark Rutland
2021-03-25 23:17         ` Sami Tolvanen
2021-03-23 20:39 ` [PATCH v3 04/17] module: ensure __cfi_check alignment Sami Tolvanen
2021-03-26  4:34   ` Kees Cook
2021-03-29  9:26   ` Jessica Yu
2021-03-23 20:39 ` [PATCH v3 05/17] workqueue: use WARN_ON_FUNCTION_MISMATCH Sami Tolvanen
2021-03-26  4:34   ` Kees Cook
2021-03-23 20:39 ` [PATCH v3 06/17] kthread: " Sami Tolvanen
2021-03-26  4:35   ` Kees Cook
2021-03-23 20:39 ` [PATCH v3 07/17] kallsyms: strip ThinLTO hashes from static functions Sami Tolvanen
2021-03-23 20:39 ` [PATCH v3 08/17] bpf: disable CFI in dispatcher functions Sami Tolvanen
2021-03-23 20:39 ` [PATCH v3 09/17] treewide: Change list_sort to use const pointers Sami Tolvanen
2021-03-23 21:28   ` Nick Desaulniers
2021-03-24  7:10   ` Christoph Hellwig
2021-03-26  4:35   ` Kees Cook
2021-03-23 20:39 ` [PATCH v3 10/17] lkdtm: use __va_function Sami Tolvanen
2021-03-23 20:39 ` [PATCH v3 11/17] psci: use __pa_function for cpu_resume Sami Tolvanen
2021-03-25 10:23   ` Mark Rutland
2021-03-23 20:39 ` [PATCH v3 12/17] arm64: implement __va_function Sami Tolvanen
2021-03-25 10:37   ` Mark Rutland [this message]
2021-03-25 23:27     ` Sami Tolvanen
2021-03-26  0:03       ` Peter Collingbourne
2021-03-23 20:39 ` [PATCH v3 13/17] arm64: use __pa_function Sami Tolvanen
2021-03-23 20:39 ` [PATCH v3 14/17] arm64: add __nocfi to functions that jump to a physical address Sami Tolvanen
2021-03-23 20:39 ` [PATCH v3 15/17] arm64: add __nocfi to __apply_alternatives Sami Tolvanen
2021-03-23 20:39 ` [PATCH v3 16/17] KVM: arm64: Disable CFI for nVHE Sami Tolvanen
2021-03-23 20:39 ` [PATCH v3 17/17] arm64: allow CONFIG_CFI_CLANG to be selected Sami Tolvanen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210325103757.GD36570@C02TD0UTHF1T.local \
    --to=mark.rutland@arm.com \
    --cc=arnd@arndb.de \
    --cc=bpf@vger.kernel.org \
    --cc=hch@infradead.org \
    --cc=jeyu@kernel.org \
    --cc=keescook@chromium.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-hardening@vger.kernel.org \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=masahiroy@kernel.org \
    --cc=nathan@kernel.org \
    --cc=ndesaulniers@google.com \
    --cc=paulmck@kernel.org \
    --cc=peterz@infradead.org \
    --cc=samitolvanen@google.com \
    --cc=tj@kernel.org \
    --cc=will@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).