[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1645165865.wa8mt7j9o7.naveen@linux.ibm.com>
Date: Fri, 18 Feb 2022 12:15:19 +0530
From: "Naveen N. Rao" <naveen.n.rao@...ux.vnet.ibm.com>
To: Alexei Starovoitov <alexei.starovoitov@...il.com>,
Daniel Borkmann <daniel@...earbox.net>,
Masami Hiramatsu <mhiramat@...nel.org>,
Michael Ellerman <mpe@...erman.id.au>,
Steven Rostedt <rostedt@...dmis.org>
Cc: bpf@...r.kernel.org, linux-kernel@...r.kernel.org,
linuxppc-dev@...ts.ozlabs.org, Nicholas Piggin <npiggin@...il.com>
Subject: Re: [PATCH 3/3] kprobes: Allow probing on any address belonging to
ftrace
Naveen N. Rao wrote:
> On certain architectures, ftrace can reserve multiple instructions at
> function entry. Rather than rejecting kprobe on addresses other than the
> exact ftrace call instruction, use the address returned by ftrace to
> probe at the correct address when CONFIG_KPROBES_ON_FTRACE is enabled.
>
> Signed-off-by: Naveen N. Rao <naveen.n.rao@...ux.vnet.ibm.com>
> ---
> kernel/kprobes.c | 12 ++++++++++++
> 1 file changed, 12 insertions(+)
>
> diff --git a/kernel/kprobes.c b/kernel/kprobes.c
> index 94cab8c9ce56cc..0a797ede3fdf37 100644
> --- a/kernel/kprobes.c
> +++ b/kernel/kprobes.c
> @@ -1497,6 +1497,10 @@ bool within_kprobe_blacklist(unsigned long addr)
> static kprobe_opcode_t *_kprobe_addr(kprobe_opcode_t *addr,
> const char *symbol_name, unsigned int offset)
> {
> +#ifdef CONFIG_KPROBES_ON_FTRACE
> + unsigned long ftrace_addr = 0;
> +#endif
> +
> if ((symbol_name && addr) || (!symbol_name && !addr))
> goto invalid;
>
> @@ -1507,6 +1511,14 @@ static kprobe_opcode_t *_kprobe_addr(kprobe_opcode_t *addr,
> }
>
> addr = (kprobe_opcode_t *)(((char *)addr) + offset);
> +
> +#ifdef CONFIG_KPROBES_ON_FTRACE
> + if (addr)
> + ftrace_addr = ftrace_location((unsigned long)addr);
> + if (ftrace_addr)
> + return (kprobe_opcode_t *)ftrace_addr;
> +#endif
One of the side effects of this is that we'll now allow probes on
non-instruction boundary within the full ftrace address range. It's not
too much of an issue since we ensure that the probe location eventually
lands on the actual ftrace instruction. But, I'm wondering if we should
instead allow architectures to opt-in to this, by making this be
architecture specific. Architectures can then do whatever validation is
necessary.
- Naveen
Powered by blists - more mailing lists