[PATCH 0/2] tracing/wprobe: Fix to avoid inifinite watchpoint exception on arm64

Masami Hiramatsu (Google) posted 2 patches 1 month, 2 weeks ago
include/linux/perf_event.h  |    9 ++-------
kernel/events/core.c        |    2 ++
kernel/trace/trace_wprobe.c |    7 +++++++
3 files changed, 11 insertions(+), 7 deletions(-)
[PATCH 0/2] tracing/wprobe: Fix to avoid inifinite watchpoint exception on arm64
Posted by Masami Hiramatsu (Google) 1 month, 2 weeks ago
Hi,

Here are patches which fixes a wprobe bug reported by Mark Brown on
arm64[1]. The root cause was that the infinite watchpoint exception on
the same instruction, because arm64 watchpoint exception happens before
the memory access has done, it needs to configure a single-step after
calling overflow handler. It does that only for the default overflow
handlers, and not for custom overflow handler registered via
hw_breakpoint interface.

[1] https://lore.kernel.org/all/aPvwGhMBJqMKcC9D@finisterre.sirena.org.uk/

To fix this issue, this series introduces default_overflow_compatible
flag in the perf_event and use it for identifying default overflow
handlers instead of checking handler functions everytime[1/2], and
set it in wprobe[2/2].

Thank you,

---

Masami Hiramatsu (Google) (2):
      perf: Introduce default_overflow_compatible flag
      tracing: wprobe: Make wprobe_handler default overflow_handler compatible


 include/linux/perf_event.h  |    9 ++-------
 kernel/events/core.c        |    2 ++
 kernel/trace/trace_wprobe.c |    7 +++++++
 3 files changed, 11 insertions(+), 7 deletions(-)

--
Masami Hiramatsu (Google) <mhiramat@kernel.org>
Re: [PATCH 0/2] tracing/wprobe: Fix to avoid inifinite watchpoint exception on arm64
Posted by Masami Hiramatsu (Google) 1 month ago
Ingo, Will, Ping?

I also found that Kyle made a change on this area recently.

Thank you,

On Thu, 30 Oct 2025 12:26:55 +0900
"Masami Hiramatsu (Google)" <mhiramat@kernel.org> wrote:

> Hi,
> 
> Here are patches which fixes a wprobe bug reported by Mark Brown on
> arm64[1]. The root cause was that the infinite watchpoint exception on
> the same instruction, because arm64 watchpoint exception happens before
> the memory access has done, it needs to configure a single-step after
> calling overflow handler. It does that only for the default overflow
> handlers, and not for custom overflow handler registered via
> hw_breakpoint interface.
> 
> [1] https://lore.kernel.org/all/aPvwGhMBJqMKcC9D@finisterre.sirena.org.uk/
> 
> To fix this issue, this series introduces default_overflow_compatible
> flag in the perf_event and use it for identifying default overflow
> handlers instead of checking handler functions everytime[1/2], and
> set it in wprobe[2/2].
> 
> Thank you,
> 
> ---
> 
> Masami Hiramatsu (Google) (2):
>       perf: Introduce default_overflow_compatible flag
>       tracing: wprobe: Make wprobe_handler default overflow_handler compatible
> 
> 
>  include/linux/perf_event.h  |    9 ++-------
>  kernel/events/core.c        |    2 ++
>  kernel/trace/trace_wprobe.c |    7 +++++++
>  3 files changed, 11 insertions(+), 7 deletions(-)
> 
> --
> Masami Hiramatsu (Google) <mhiramat@kernel.org>


-- 
Masami Hiramatsu (Google) <mhiramat@kernel.org>
Re: [PATCH 0/2] tracing/wprobe: Fix to avoid inifinite watchpoint exception on arm64
Posted by Masami Hiramatsu (Google) 1 month, 1 week ago
Gently ping.

There is a bugfix (or strange behavior) on arm64 hw breakpoint but
to fix it cleanly, it should change the perf itself (but I'm not
sure why arm64 changes the behavior only for the default overflow
handlers.) Anyone knows it?

Thank you,

On Thu, 30 Oct 2025 12:26:55 +0900
"Masami Hiramatsu (Google)" <mhiramat@kernel.org> wrote:

> Hi,
> 
> Here are patches which fixes a wprobe bug reported by Mark Brown on
> arm64[1]. The root cause was that the infinite watchpoint exception on
> the same instruction, because arm64 watchpoint exception happens before
> the memory access has done, it needs to configure a single-step after
> calling overflow handler. It does that only for the default overflow
> handlers, and not for custom overflow handler registered via
> hw_breakpoint interface.
> 
> [1] https://lore.kernel.org/all/aPvwGhMBJqMKcC9D@finisterre.sirena.org.uk/
> 
> To fix this issue, this series introduces default_overflow_compatible
> flag in the perf_event and use it for identifying default overflow
> handlers instead of checking handler functions everytime[1/2], and
> set it in wprobe[2/2].
> 
> Thank you,
> 
> ---
> 
> Masami Hiramatsu (Google) (2):
>       perf: Introduce default_overflow_compatible flag
>       tracing: wprobe: Make wprobe_handler default overflow_handler compatible
> 
> 
>  include/linux/perf_event.h  |    9 ++-------
>  kernel/events/core.c        |    2 ++
>  kernel/trace/trace_wprobe.c |    7 +++++++
>  3 files changed, 11 insertions(+), 7 deletions(-)
> 
> --
> Masami Hiramatsu (Google) <mhiramat@kernel.org>


-- 
Masami Hiramatsu (Google) <mhiramat@kernel.org>
Re: [PATCH 0/2] tracing/wprobe: Fix to avoid inifinite watchpoint exception on arm64
Posted by Will Deacon 4 weeks, 1 day ago
On Tue, Nov 04, 2025 at 10:37:35PM +0900, Masami Hiramatsu wrote:
> Gently ping.
> 
> There is a bugfix (or strange behavior) on arm64 hw breakpoint but
> to fix it cleanly, it should change the perf itself (but I'm not
> sure why arm64 changes the behavior only for the default overflow
> handlers.) Anyone knows it?

It's because GDB expects to handle the stepping itself when using the
ptrace interface (with a custom overflow handler to deliver SIGTRAP).

Will
Re: [PATCH 0/2] tracing/wprobe: Fix to avoid inifinite watchpoint exception on arm64
Posted by Masami Hiramatsu (Google) 3 weeks, 5 days ago
On Fri, 14 Nov 2025 16:17:06 +0000
Will Deacon <will@kernel.org> wrote:

> On Tue, Nov 04, 2025 at 10:37:35PM +0900, Masami Hiramatsu wrote:
> > Gently ping.
> > 
> > There is a bugfix (or strange behavior) on arm64 hw breakpoint but
> > to fix it cleanly, it should change the perf itself (but I'm not
> > sure why arm64 changes the behavior only for the default overflow
> > handlers.) Anyone knows it?
> 
> It's because GDB expects to handle the stepping itself when using the
> ptrace interface (with a custom overflow handler to deliver SIGTRAP).

Hmm, would you mean GDB for user program?
If so, it expects hw breakpoint is used by:
 - user-space ptrace (for GDB)
 - kernel-space perf (must be default overflow handler)

And not expects to be used by 

 - kernel-space custom overflow handler

This series is to handle the third use case.

Thank you,

-- 
Masami Hiramatsu (Google) <mhiramat@kernel.org>