Re: [PATCH] x86/kprobes: Fix KRETPROBES when CONFIG_KRETPROBE_ON_RETHOOK is set

From: Masami Hiramatsu
Date: Sat Apr 16 2022 - 10:06:42 EST


On Fri, 15 Apr 2022 20:10:06 +0200
Adam Zabrocki <pi3@xxxxxxxxxx> wrote:

> [PATCH] x86/kprobes: Fix KRETPROBES when CONFIG_KRETPROBE_ON_RETHOOK is set
>
> The recent kernel change "kprobes: Use rethook for kretprobe if possible",
> introduced a potential NULL pointer dereference bug in the KRETPROBE
> mechanism. The official Kprobes documentation defines that "Any or all
> handlers can be NULL". Unfortunately, there is a missing return handler
> verification to fulfill these requirements and can result in a NULL pointer
> dereference bug.
>
> This patch adds such verification in kretprobe_rethook_handler() function.
>

Good catch! I forgot that user can register kretprobe without handler...

Acked-by: Masami Hiramatsu <mhiramat@xxxxxxxxxx>

Thank you!

> Fixes: 73f9b911faa7 ("kprobes: Use rethook for kretprobe if possible")
> Signed-off-by: Adam Zabrocki <pi3@xxxxxxxxxx>
> ---
> kernel/kprobes.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/kernel/kprobes.c b/kernel/kprobes.c
> index dbe57df2e199..dd58c0be9ce2 100644
> --- a/kernel/kprobes.c
> +++ b/kernel/kprobes.c
> @@ -2126,7 +2126,7 @@ static void kretprobe_rethook_handler(struct rethook_node *rh, void *data,
> struct kprobe_ctlblk *kcb;
>
> /* The data must NOT be null. This means rethook data structure is broken. */
> - if (WARN_ON_ONCE(!data))
> + if (WARN_ON_ONCE(!data) || !rp->handler)
> return;
>
> __this_cpu_write(current_kprobe, &rp->kp);
>
> --
> pi3 (pi3ki31ny) - pi3 (at) itsec pl
> http://pi3.com.pl
>


--
Masami Hiramatsu <mhiramat@xxxxxxxxxx>