Messages in this thread | | | From | Sami Tolvanen <> | Date | Tue, 6 Apr 2021 10:02:56 -0700 | Subject | Re: [PATCH v5 12/18] arm64: implement function_nocfi |
| |
On Tue, Apr 6, 2021 at 4:37 AM Mark Rutland <mark.rutland@arm.com> wrote: > > On Thu, Apr 01, 2021 at 04:32:10PM -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 function_nocfi() macro, which returns the actual function address > > instead. > > > > Signed-off-by: Sami Tolvanen <samitolvanen@google.com> > > Reviewed-by: Kees Cook <keescook@chromium.org> > > I think that it's unfortunate that we have to drop to assembly here, but > given this is infrequent I agree it's not the end of the world, so: > > Acked-by: Mark Rutland <mark.rutland@arm.com> > > > --- > > 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..b55410afd3d1 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 function_nocfi macro always returns the address of the > > + * actual function instead. > > + */ > > +#define function_nocfi(x) ({ \ > > + void *addr; \ > > + asm("adrp %0, " __stringify(x) "\n\t" \ > > + "add %0, %0, :lo12:" __stringify(x) : "=r" (addr)); \ > > If it's not too painful, could we please move the asm constrain onto its > own line? That makes it slightly easier to read, and aligns with what > we've (mostly) done elsewhere in arm64.
Sure, I'll change this in the next version.
> Not a big deal either way, and the ack stands regardless. > > Thanks, > Mark.
Sami
| |