All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Masami Hiramatsu (Google)" <mhiramat@kernel.org>
Cc: linux-perf-users@vger.kernel.org,
	linux-trace-kernel@vger.kernel.org, kvm@vger.kernel.org
Subject: Re: [PATCH v17 10/13] tracing/wprobe: Add set_wprobe and clear_wprobe event triggers
Date: Tue, 22 Sep 2026 04:43:24 +0000	[thread overview]
Message-ID: <20260922044325.587F31F00898@smtp.kernel.org> (raw)
In-Reply-To: <179005120276.388919.1645992887114424511.stgit@devnote2>

Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
- [High] tracing/wprobe: NMI deadlock in wprobe_trigger() when count is not specified
- [High] tracing/wprobe: CPU hotplug race in __register_trace_wprobe() misses new CPUs
- [Medium] tracing/wprobe: TOCTOU race in wprobe_trigger() corrupts watchpoint address
--

commit b9f67542e6bf772512bb8cbf3c3011379c301eb4
Author: Masami Hiramatsu (Google) <mhiramat@kernel.org>

tracing/wprobe: Add set_wprobe and clear_wprobe event triggers

Add set_wprobe and clear_wprobe event triggers to dynamically attach
and detach hardware breakpoint address monitoring based on event field
contents.

Link: https://lore.kernel.org/all/59637b96946653393a7ad3c7de094094796b39c2.1785067572.git.wangjinchao600@gmail.com/

> diff --git a/kernel/trace/trace_wprobe.c b/kernel/trace/trace_wprobe.c
> index 9c6100b63e8d9..f1d6aa320f213 100644
> --- a/kernel/trace/trace_wprobe.c
> +++ b/kernel/trace/trace_wprobe.c
> @@ -193,20 +217,130 @@ static int __register_trace_wprobe(struct trace_wprobe *tw)

[ ... ]

>  	tw->bp_event = register_wide_hw_breakpoint(&attr, wprobe_perf_handler, tw);
>  	if (IS_ERR_PCPU(tw->bp_event)) {
>  		int ret = PTR_ERR_PCPU(tw->bp_event);
>  
>  		tw->bp_event = NULL;
>  		return ret;
>  	}
>  
> +	mutex_lock(&wprobe_mutex);
> +	list_add(&tw->active_list, &active_wprobes);
> +	mutex_unlock(&wprobe_mutex);
> +

[Severity: High]
Does this code have a race condition with CPU hotplug?

Looking at __register_trace_wprobe(), it calls register_wide_hw_breakpoint()
which installs breakpoints and releases the hotplug lock internally.

If a new CPU comes online immediately after that lock is released, but before
this wprobe is added to active_wprobes under wprobe_mutex, could the
wprobe_cpu_online() callback miss the wprobe? This would leave the new CPU
without hardware breakpoints installed for this probe.

>  	return 0;
>  }

[ ... ]

> @@ -767,9 +923,608 @@ static int trace_wprobe_show(struct seq_file *m, struct dyn_event *ev)

[ ... ]

> +static void wprobe_trigger(struct event_trigger_data *data,
> +			   struct trace_buffer *buffer,  void *rec,
> +			   struct ring_buffer_event *event)
> +{
> +	struct wprobe_trigger_data *wprobe_data = data->private_data;
> +	struct trace_wprobe *tw = wprobe_data->tw;
> +	unsigned long target_addr, addr = 0, flags;
> +
> +	if (wprobe_data->field) {
> +		if (!rec)
> +			return;
> +		addr = *(unsigned long *)((char *)rec + wprobe_data->offset);
> +		addr += wprobe_data->adjust;
> +	}
> +
> +	raw_spin_lock_irqsave(&tw->lock, flags);
> +

[Severity: High]
Could this raw_spin_lock_irqsave() cause a deadlock if interrupted by an NMI?

When no count limit is specified (EVENT_TRIGGER_FL_COUNT is not set),
wprobe_trigger() takes tw->lock before calling __wprobe_count_func().

If an NMI interrupts a CPU already holding tw->lock and hits a trace event
that fires the same uncounted trigger, it will attempt to acquire tw->lock
again here. Since the in_nmi() check is located inside __wprobe_count_func(),
the NMI would spin forever before realizing it shouldn't proceed.

> +	if (!(data->flags & EVENT_TRIGGER_FL_COUNT)) {
> +		if (!__wprobe_count_func(data, addr)) {
> +			atomic_inc(&tw->missed);
> +			goto out;
> +		}
> +	}

[Severity: Medium]
Is there a time-of-check to time-of-use (TOCTOU) race here for counted
triggers?

For counted triggers, wprobe_count_func() is called locklessly by the trace
core, which evaluates __wprobe_count_func(). Then, wprobe_trigger() is called
and takes tw->lock. Because EVENT_TRIGGER_FL_COUNT is set, the state
validation check (__wprobe_count_func()) is explicitly skipped under the lock.

If a counted trigger fires concurrently on multiple CPUs, both might
observe the unset address locklessly. Could the second CPU unconditionally
overwrite tw->addr, breaking the exclusive trigger constraint?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/179005108298.388919.4535333252892590932.stgit@devnote2?part=10

  reply	other threads:[~2026-09-22  4:43 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-22  4:24 [PATCH v17 00/13] tracing: wprobe: x86: Add wprobe for watchpoint Masami Hiramatsu (Google)
2026-09-22  4:24 ` [PATCH v17 01/13] x86/mce: Fix hardware debug register corruption on task migration Masami Hiramatsu (Google)
2026-09-22  4:40   ` sashiko-bot
2026-09-23  0:27   ` Borislav Petkov
2026-09-23  8:46     ` Peter Zijlstra
2026-09-23  8:56     ` Masami Hiramatsu
2026-09-22  4:25 ` [PATCH v17 02/13] perf/x86, KVM: Prevent host debug register leak into guest OS on NMI Masami Hiramatsu (Google)
2026-09-22  4:40   ` sashiko-bot
2026-09-23  8:51   ` Peter Zijlstra
2026-09-23 14:33     ` Sean Christopherson
2026-09-24  1:31       ` Masami Hiramatsu
2026-09-24  9:18       ` Peter Zijlstra
2026-09-23  9:15   ` Peter Zijlstra
2026-09-23 15:32     ` Sean Christopherson
2026-09-24  0:56       ` Masami Hiramatsu
2026-09-24  9:23       ` Peter Zijlstra
2026-09-22  4:25 ` [PATCH v17 03/13] x86/hw_breakpoints: Make DR7 updates NMI safe Masami Hiramatsu (Google)
2026-09-22  4:40   ` sashiko-bot
2026-09-23  9:13   ` Peter Zijlstra
2026-09-24 12:56     ` Masami Hiramatsu
2026-09-22  4:25 ` [PATCH v17 04/13] x86/hw_breakpoints: Add arch_modify_local_hw_breakpoint_addr() API Masami Hiramatsu (Google)
2026-09-22  4:39   ` sashiko-bot
2026-09-22  4:25 ` [PATCH v17 05/13] HWBP: Add modify_local_hw_breakpoint_addr() API Masami Hiramatsu (Google)
2026-09-22  4:35   ` sashiko-bot
2026-09-22  4:25 ` [PATCH v17 06/13] tracing/wprobe: Add wprobe (watchpoint probe) trace event support Masami Hiramatsu (Google)
2026-09-22  4:41   ` sashiko-bot
2026-09-22  4:26 ` [PATCH v17 07/13] x86: hw_breakpoint: Add a kconfig to clarify when a breakpoint fires Masami Hiramatsu (Google)
2026-09-22  4:32   ` sashiko-bot
2026-09-22  4:26 ` [PATCH v17 08/13] selftests: tracing: Add a basic testcase for wprobe Masami Hiramatsu (Google)
2026-09-22  4:32   ` sashiko-bot
2026-09-22  4:26 ` [PATCH v17 09/13] selftests: tracing: Add syntax " Masami Hiramatsu (Google)
2026-09-22  4:34   ` sashiko-bot
2026-09-22  4:26 ` [PATCH v17 10/13] tracing/wprobe: Add set_wprobe and clear_wprobe event triggers Masami Hiramatsu (Google)
2026-09-22  4:43   ` sashiko-bot [this message]
2026-09-25  2:26     ` Masami Hiramatsu
2026-09-22  4:26 ` [PATCH v17 11/13] selftests: tracing: Add wprobe trigger testcases Masami Hiramatsu (Google)
2026-09-22  4:41   ` sashiko-bot
2026-09-25  3:28     ` Masami Hiramatsu
2026-09-22  4:27 ` [PATCH v17 12/13] tracing/wprobe: Support BTF typecast in fetchargs Masami Hiramatsu (Google)
2026-09-22  4:42   ` sashiko-bot
2026-09-22  4:27 ` [PATCH v17 13/13] tracing/wprobe: Support BTF struct offset resolution in set_wprobe trigger Masami Hiramatsu (Google)
2026-09-22  4:43   ` sashiko-bot
2026-09-25  3:00     ` Masami Hiramatsu
2026-09-25  3:42     ` Masami Hiramatsu
2026-09-28 10:07 ` [PATCH v17 00/13] tracing: wprobe: x86: Add wprobe for watchpoint Li Pengfei

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260922044325.587F31F00898@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=linux-trace-kernel@vger.kernel.org \
    --cc=mhiramat@kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.