* [PATCH] kprobes: Fix NULL pointer dereference in unregister_kretprobes()
@ 2026-08-05 16:12 Luigi Rizzo
2026-08-05 18:40 ` Bradley Morgan
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Luigi Rizzo @ 2026-08-05 16:12 UTC (permalink / raw)
To: Masami Hiramatsu, Naveen N Rao, Luigi Rizzo, David S . Miller
Cc: JP Kobryn, linux-trace-kernel, linux-kernel, Luigi Rizzo
In unregister_kretprobes(), rps[i]->rph can be NULL e.g. when called
after kretprobe failed registration. Under !CONFIG_KRETPROBE_ON_RETHOOK,
the unconditional access to rps[i]->rph->rp, causes a kernel panic due
to NULL pointer dereference.
Add a NULL check for rps[i]->rph before invoking rcu_assign_pointer().
Fixes: d839a656d0f3 ("kprobes: consistent rcu api usage for kretprobe holder")
Signed-off-by: Luigi Rizzo <lrizzo@google.com>
---
kernel/kprobes.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/kernel/kprobes.c b/kernel/kprobes.c
index bfc89083daa93..5dd4786c455de 100644
--- a/kernel/kprobes.c
+++ b/kernel/kprobes.c
@@ -2359,7 +2359,8 @@ void unregister_kretprobes(struct kretprobe **rps, int num)
#ifdef CONFIG_KRETPROBE_ON_RETHOOK
rethook_free(rps[i]->rh);
#else
- rcu_assign_pointer(rps[i]->rph->rp, NULL);
+ if (rps[i]->rph)
+ rcu_assign_pointer(rps[i]->rph->rp, NULL);
#endif
}
--
2.48.1.500.g5897711438-goog
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [PATCH] kprobes: Fix NULL pointer dereference in unregister_kretprobes() 2026-08-05 16:12 [PATCH] kprobes: Fix NULL pointer dereference in unregister_kretprobes() Luigi Rizzo @ 2026-08-05 18:40 ` Bradley Morgan 2026-08-05 20:25 ` JP Kobryn 2026-08-06 0:02 ` Masami Hiramatsu 2 siblings, 0 replies; 6+ messages in thread From: Bradley Morgan @ 2026-08-05 18:40 UTC (permalink / raw) To: lrizzo Cc: davem, inwardvessel, linux-kernel, linux-trace-kernel, mhiramat, naveen, rizzo.unipi Thanks for the patch, good catch. Reviewed-by: Bradley Morgan <include@grrlz.net> Thanks! ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] kprobes: Fix NULL pointer dereference in unregister_kretprobes() 2026-08-05 16:12 [PATCH] kprobes: Fix NULL pointer dereference in unregister_kretprobes() Luigi Rizzo 2026-08-05 18:40 ` Bradley Morgan @ 2026-08-05 20:25 ` JP Kobryn 2026-08-06 0:02 ` Masami Hiramatsu 2 siblings, 0 replies; 6+ messages in thread From: JP Kobryn @ 2026-08-05 20:25 UTC (permalink / raw) To: Luigi Rizzo, Masami Hiramatsu, Naveen N Rao, Luigi Rizzo, David S . Miller Cc: linux-trace-kernel, linux-kernel On 8/5/2026 9:12 AM, Luigi Rizzo wrote: > In unregister_kretprobes(), rps[i]->rph can be NULL e.g. when called > after kretprobe failed registration. Under !CONFIG_KRETPROBE_ON_RETHOOK, > the unconditional access to rps[i]->rph->rp, causes a kernel panic due > to NULL pointer dereference. > > Add a NULL check for rps[i]->rph before invoking rcu_assign_pointer(). > > Fixes: d839a656d0f3 ("kprobes: consistent rcu api usage for kretprobe holder") The bug was not introduced in this commit. It goes further back to: d741bf41d7c7 ("kprobes: Remove kretprobe hash") > Signed-off-by: Luigi Rizzo <lrizzo@google.com> > --- > kernel/kprobes.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/kernel/kprobes.c b/kernel/kprobes.c > index bfc89083daa93..5dd4786c455de 100644 > --- a/kernel/kprobes.c > +++ b/kernel/kprobes.c > @@ -2359,7 +2359,8 @@ void unregister_kretprobes(struct kretprobe **rps, int num) > #ifdef CONFIG_KRETPROBE_ON_RETHOOK > rethook_free(rps[i]->rh); > #else > - rcu_assign_pointer(rps[i]->rph->rp, NULL); > + if (rps[i]->rph) > + rcu_assign_pointer(rps[i]->rph->rp, NULL); > #endif > } > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] kprobes: Fix NULL pointer dereference in unregister_kretprobes() 2026-08-05 16:12 [PATCH] kprobes: Fix NULL pointer dereference in unregister_kretprobes() Luigi Rizzo 2026-08-05 18:40 ` Bradley Morgan 2026-08-05 20:25 ` JP Kobryn @ 2026-08-06 0:02 ` Masami Hiramatsu 2026-08-06 7:23 ` Luigi Rizzo 2 siblings, 1 reply; 6+ messages in thread From: Masami Hiramatsu @ 2026-08-06 0:02 UTC (permalink / raw) To: Luigi Rizzo Cc: Naveen N Rao, Luigi Rizzo, David S . Miller, JP Kobryn, linux-trace-kernel, linux-kernel On Wed, 5 Aug 2026 16:12:21 +0000 Luigi Rizzo <lrizzo@google.com> wrote: > In unregister_kretprobes(), rps[i]->rph can be NULL e.g. when called > after kretprobe failed registration. Under !CONFIG_KRETPROBE_ON_RETHOOK, > the unconditional access to rps[i]->rph->rp, causes a kernel panic due > to NULL pointer dereference. This is not a bug, since if register_kretprobe(rp) fails, rp must NOT be passed to unregister_kretprobe(rp). Or, do you find any cases where register_kretprobe() fails, preventing proper cleanup, and requiring unregister_kretprobe()? If so, we have to fix that case. > > Add a NULL check for rps[i]->rph before invoking rcu_assign_pointer(). > But this could be a kind of protective improvemet for someone misunderstand that. Thank you, > Fixes: d839a656d0f3 ("kprobes: consistent rcu api usage for kretprobe holder") > Signed-off-by: Luigi Rizzo <lrizzo@google.com> > --- > kernel/kprobes.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/kernel/kprobes.c b/kernel/kprobes.c > index bfc89083daa93..5dd4786c455de 100644 > --- a/kernel/kprobes.c > +++ b/kernel/kprobes.c > @@ -2359,7 +2359,8 @@ void unregister_kretprobes(struct kretprobe **rps, int num) > #ifdef CONFIG_KRETPROBE_ON_RETHOOK > rethook_free(rps[i]->rh); > #else > - rcu_assign_pointer(rps[i]->rph->rp, NULL); > + if (rps[i]->rph) > + rcu_assign_pointer(rps[i]->rph->rp, NULL); > #endif > } > > -- > 2.48.1.500.g5897711438-goog > > -- Masami Hiramatsu (Google) <mhiramat@kernel.org> ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] kprobes: Fix NULL pointer dereference in unregister_kretprobes() 2026-08-06 0:02 ` Masami Hiramatsu @ 2026-08-06 7:23 ` Luigi Rizzo 2026-08-06 13:41 ` Masami Hiramatsu 0 siblings, 1 reply; 6+ messages in thread From: Luigi Rizzo @ 2026-08-06 7:23 UTC (permalink / raw) To: Masami Hiramatsu Cc: Naveen N Rao, Luigi Rizzo, David S . Miller, JP Kobryn, linux-trace-kernel, linux-kernel On Thu, Aug 6, 2026 at 2:02 AM Masami Hiramatsu <mhiramat@kernel.org> wrote: > > On Wed, 5 Aug 2026 16:12:21 +0000 > Luigi Rizzo <lrizzo@google.com> wrote: > > > In unregister_kretprobes(), rps[i]->rph can be NULL e.g. when called > > after kretprobe failed registration. Under !CONFIG_KRETPROBE_ON_RETHOOK, > > the unconditional access to rps[i]->rph->rp, causes a kernel panic due > > to NULL pointer dereference. > > This is not a bug, since if register_kretprobe(rp) fails, rp must NOT be > passed to unregister_kretprobe(rp). Or, do you find any cases where > register_kretprobe() fails, preventing proper cleanup, and requiring > unregister_kretprobe()? If so, we have to fix that case. Masami, you are right, the kernel tree does not call unregister_kretprobes() on a failed registration. I was confused by the unregister_kretprobes(rps, i); call in the cleanup in register_kretprobes(), but the failed entry i is not unregistered). So aside from protective coding (but where would one stop ? null rps, null rps[i], ... ), there is no need for this patch. thanks for the feedback Luigi ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] kprobes: Fix NULL pointer dereference in unregister_kretprobes() 2026-08-06 7:23 ` Luigi Rizzo @ 2026-08-06 13:41 ` Masami Hiramatsu 0 siblings, 0 replies; 6+ messages in thread From: Masami Hiramatsu @ 2026-08-06 13:41 UTC (permalink / raw) To: Luigi Rizzo Cc: Naveen N Rao, Luigi Rizzo, David S . Miller, JP Kobryn, linux-trace-kernel, linux-kernel On Thu, 6 Aug 2026 09:23:29 +0200 Luigi Rizzo <lrizzo@google.com> wrote: > On Thu, Aug 6, 2026 at 2:02 AM Masami Hiramatsu <mhiramat@kernel.org> wrote: > > > > On Wed, 5 Aug 2026 16:12:21 +0000 > > Luigi Rizzo <lrizzo@google.com> wrote: > > > > > In unregister_kretprobes(), rps[i]->rph can be NULL e.g. when called > > > after kretprobe failed registration. Under !CONFIG_KRETPROBE_ON_RETHOOK, > > > the unconditional access to rps[i]->rph->rp, causes a kernel panic due > > > to NULL pointer dereference. > > > > This is not a bug, since if register_kretprobe(rp) fails, rp must NOT be > > passed to unregister_kretprobe(rp). Or, do you find any cases where > > register_kretprobe() fails, preventing proper cleanup, and requiring > > unregister_kretprobe()? If so, we have to fix that case. > > Masami, you are right, the kernel tree does not call unregister_kretprobes() > on a failed registration. I was confused by the unregister_kretprobes(rps, i); > call in the cleanup in register_kretprobes(), but the failed entry i is > not unregistered). Yes, in that case rps[i] is not unregistered ;) > > So aside from protective coding (but where would one stop ? > null rps, null rps[i], ... ), there is no need for this patch. OK, Thanks for the confirmation! Thanks, > > thanks for the feedback > Luigi -- Masami Hiramatsu (Google) <mhiramat@kernel.org> ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2026-08-06 13:41 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-08-05 16:12 [PATCH] kprobes: Fix NULL pointer dereference in unregister_kretprobes() Luigi Rizzo 2026-08-05 18:40 ` Bradley Morgan 2026-08-05 20:25 ` JP Kobryn 2026-08-06 0:02 ` Masami Hiramatsu 2026-08-06 7:23 ` Luigi Rizzo 2026-08-06 13:41 ` Masami Hiramatsu
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox