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: <CAFEugPfsYVfHroc7W7PHjnRbs+KRj53AaCgeQHZediSoYm6E8g@mail.gmail.com>
Date: Thu, 6 Feb 2025 19:19:33 +0100
From: Gabriel de Perthuis <g2p.code@...il.com>
To: "Masami Hiramatsu (Google)" <mhiramat@...nel.org>
Cc: Steven Rostedt <rostedt@...dmis.org>, Haiyue Wang <haiyuewa@....com>, 
	Sami Tolvanen <samitolvanen@...gle.com>, Mark Rutland <mark.rutland@....com>, 
	Thomas Gleixner <tglx@...utronix.de>, Ingo Molnar <mingo@...hat.com>, Borislav Petkov <bp@...en8.de>, 
	Dave Hansen <dave.hansen@...ux.intel.com>, "H . Peter Anvin" <hpa@...or.com>, x86@...nel.org, 
	linux-trace-kernel@...r.kernel.org, LKML <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH] ftrace: x86: Fix a compile error about get_kernel_nofault()

Hello,
I can confirm this solves the build issue alongside gendwarfksyms;
much appreciated.

Le jeu. 6 févr. 2025 à 04:12, Masami Hiramatsu (Google)
<mhiramat@...nel.org> a écrit :
>
> From: Masami Hiramatsu (Google) <mhiramat@...nel.org>
>
> Fix a compile error about get_kernel_nofault() which is defined in the
> linux/uaccess.h. Since asm/ftrace.h is widely used, including
> linux/uaccess.h in asm/ftrace.h caused another error. Thus this
> moves arch_ftrace_get_symaddr() into arch/x86/kernel/ftrace.c.
>
> The original errors look like:
>
> In file included from ./arch/x86/include/asm/asm-prototypes.h:2,
>                  from <stdin>:3:
> ./arch/x86/include/asm/ftrace.h: In function 'arch_ftrace_get_symaddr':
> ./arch/x86/include/asm/ftrace.h:46:21: error: implicit declaration of function 'get_kernel_nofault' [-Werror=implicit-function-declaration]
>    46 |                 if (get_kernel_nofault(instr, (u32 *)(fentry_ip - ENDBR_INSN_SIZE)))
>       |                     ^~~~~~~~~~~~~~~~~~
>
> This also makes ftrace_get_symaddr() available only when
> CONFIG_HAVE_FENTRY=y on x86.
>
> Reported-by: Gabriel de Perthuis <g2p.code@...il.com>
> Closes: https://lore.kernel.org/all/a87f98bf-45b1-4ef5-aa77-02f7e61203f4@gmail.com/
> Reported-by: Haiyue Wang <haiyuewa@....com>
> Closes: https://lore.kernel.org/all/20250205180116.88644-1-haiyuewa@163.com/
> Fixes: 2bc56fdae1ba ("ftrace: Add ftrace_get_symaddr to convert fentry_ip to symaddr")
> Signed-off-by: Masami Hiramatsu (Google) <mhiramat@...nel.org>
> ---
>  arch/x86/include/asm/ftrace.h |   23 ++++-------------------
>  arch/x86/kernel/ftrace.c      |   26 +++++++++++++++++++++++++-
>  2 files changed, 29 insertions(+), 20 deletions(-)
>
> diff --git a/arch/x86/include/asm/ftrace.h b/arch/x86/include/asm/ftrace.h
> index f9cb4d07df58..1ed08f2de366 100644
> --- a/arch/x86/include/asm/ftrace.h
> +++ b/arch/x86/include/asm/ftrace.h
> @@ -34,26 +34,11 @@ static inline unsigned long ftrace_call_adjust(unsigned long addr)
>         return addr;
>  }
>
> -static inline unsigned long arch_ftrace_get_symaddr(unsigned long fentry_ip)
> -{
> -#ifdef CONFIG_X86_KERNEL_IBT
> -       u32 instr;
> -
> -       /* We want to be extra safe in case entry ip is on the page edge,
> -        * but otherwise we need to avoid get_kernel_nofault()'s overhead.
> -        */
> -       if ((fentry_ip & ~PAGE_MASK) < ENDBR_INSN_SIZE) {
> -               if (get_kernel_nofault(instr, (u32 *)(fentry_ip - ENDBR_INSN_SIZE)))
> -                       return fentry_ip;
> -       } else {
> -               instr = *(u32 *)(fentry_ip - ENDBR_INSN_SIZE);
> -       }
> -       if (is_endbr(instr))
> -               fentry_ip -= ENDBR_INSN_SIZE;
> -#endif
> -       return fentry_ip;
> -}
> +/* This does not support mcount. */
> +#ifdef CONFIG_HAVE_FENTRY
> +unsigned long arch_ftrace_get_symaddr(unsigned long fentry_ip);
>  #define ftrace_get_symaddr(fentry_ip)  arch_ftrace_get_symaddr(fentry_ip)
> +#endif
>
>  #ifdef CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS
>
> diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c
> index 166bc0ea3bdf..7250118005fc 100644
> --- a/arch/x86/kernel/ftrace.c
> +++ b/arch/x86/kernel/ftrace.c
> @@ -29,11 +29,35 @@
>
>  #include <trace/syscall.h>
>
> -#include <asm/kprobes.h>
>  #include <asm/ftrace.h>
> +#include <asm/ibt.h>
> +#include <asm/kprobes.h>
>  #include <asm/nops.h>
>  #include <asm/text-patching.h>
>
> +#ifdef CONFIG_HAVE_FENTRY
> +/* Convert fentry address to the symbol address. */
> +unsigned long arch_ftrace_get_symaddr(unsigned long fentry_ip)
> +{
> +#ifdef CONFIG_X86_KERNEL_IBT
> +       u32 instr;
> +
> +       /* We want to be extra safe in case entry ip is on the page edge,
> +        * but otherwise we need to avoid get_kernel_nofault()'s overhead.
> +        */
> +       if ((fentry_ip & ~PAGE_MASK) < ENDBR_INSN_SIZE) {
> +               if (get_kernel_nofault(instr, (u32 *)(fentry_ip - ENDBR_INSN_SIZE)))
> +                       return fentry_ip;
> +       } else {
> +               instr = *(u32 *)(fentry_ip - ENDBR_INSN_SIZE);
> +       }
> +       if (is_endbr(instr))
> +               fentry_ip -= ENDBR_INSN_SIZE;
> +#endif
> +       return fentry_ip;
> +}
> +#endif
> +
>  #ifdef CONFIG_DYNAMIC_FTRACE
>
>  static int ftrace_poke_late = 0;
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ