Re: [PATCH 0/2] arm64/debug: clean up some HW BP edge cases

Ada Couprie Diaz <[email protected]>
Newsgroups org.infradead.lists.linux-arm-kernel
Organization Arm Ltd.
Message-ID <[email protected]>
Hi Will,

Sorry for the delay, I did not manage to respond before going on leave
as I got lost in the weeds of understanding what ptrace is doing when
using hardware debug registers.

On 22/07/2026 22:42, Will Deacon wrote:
> On Wed, Jul 22, 2026 at 01:56:44PM +0100, Mark Rutland wrote:
>> On Wed, Jul 22, 2026 at 12:30:34PM +0100, Will Deacon wrote:
>>> On Wed, May 27, 2026 at 05:15:51PM +0100, Ada Couprie Diaz wrote:
>>>> This is a small series focused on fixing some unsoundess and edge case
>>>> related to hardware breakpoints and watchpoints.
>>>>
>>>> It is motivated in part by the recent discussion on the
>>>> FEAT_Debugv8p6 series[0][1] regarding unclear guarantees on interruptions.
>>>>
>>>> It doesn't address the issue of instrumentation, as NO_KPROBE is not
>>>> sufficient to prevent it (specifically ftrace) and would require a pass
>>>> over the whole debug handling code.
>>>>
>>>> The bugs themselves are very much of the self-inflicted
>>>> "you should not be doing this" kind and not urgent, but it does solve
>>>> some of the questions on the FEAT_Dbugv8p6 series.
>>>>
>>>> Most of the raw additions are comments trying to give more context to
>>>> understand `hw_breakpoint_thread_switch()`.
>>> Hmm. From what I can tell, these patches are trying to handle various
>>> cases where we take a debug exception while executing the hw_breakpoint
>>> code itself. Even with these two fixes, is perf expecting to handle that
>>> sort of thing? I think it would be a lot more robust if we just prevented
>>> this from happening in the first place, similarly to the discussion from
>>> the other day around kprobes [2].
I am indeed handling weird edge-cases !
As Perf only uses local_irq masks, it is not sufficient to prevent us 
from taking
debug exceptions while it manipulates the debug registers, so even if 
all the
debug exceptions themselves are safe, perf/ptrace callbacks and syscalls 
are not.
>> Since [2] mentions noinstr, it's worth noting that noinstr alone isn't
>> sufficient. Watchpoints also use this path, and we can't practically
>> filter watchpoint addresses to avoid hitting a watchpoint here.
>>
>> I assume you'd be happy with masking debug exceptions entirely?
> Yes, I think that's the only option, really, and I think we might even
> have done that at some point in the past. [...]
>
If you both think that makes sense to save/restore DAIF here, I am
happy to send a patch doing so. That would indeed make sure we
don't hit this kind of issues !
Making the debug code safe from instrumentation is a different story...
> [...] The problem, however, is if we
> end up getting preempted in that state. We currently have preemption
> disabled, but there's a thread trying to change that based on one of
> Ada's tests (not blaming the test, it's pointing out a real issue here):
>
> https://lore.kernel.org/r/[email protected]
I did not have the time to take a proper look, but it seems that Sebastian
has sent another patch for this issue which keeps premption disabled :

https://lore.kernel.org/r/[email protected]

So I think we should be OK masking DAIF here then.

Thanks both,
Ada
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.