From: sashiko-bot@kernel.org
To: wen.yang@linux.dev
Cc: linux-trace-kernel@vger.kernel.org
Subject: Re: [PATCH v7 04/14] rv: Disarm HA timers on the storage free path
Date: Sun, 11 Oct 2026 19:51:22 +0000 [thread overview]
Message-ID: <sashiko-outbox-167422@kernel.org> (raw)
In-Reply-To: <3d5a8a567f1c1921f725c31a780845ff23e5abb9.1791745088.git.wen.yang@linux.dev>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] rcu: missing rcu_barrier() on module unload causes kernel panic
- [Low] timers: teardown path uses timer_delete_sync() instead of timer_shutdown_sync()
--
commit 659afa957e903e72b692e0af300f112338f0d03d
Author: Wen Yang <wen.yang@linux.dev>
rv: Disarm HA timers on the storage free path
This patch addresses a use-after-free issue where an HA timer can be queued
on a storage object that is subsequently freed by kfree_rcu(). It adds a
da_monitor_free_hook() callback just before the storage is freed to
securely cancel the timer. To support this hook, kfree_rcu() is replaced
with call_rcu() and a dedicated callback function.
> diff --git a/include/rv/da_monitor.h b/include/rv/da_monitor.h
> index 6fc5ef8142aca..5d3468a7a12b7 100644
> --- a/include/rv/da_monitor.h
> +++ b/include/rv/da_monitor.h
[ ... ]
> @@ -543,6 +554,15 @@ static inline monitor_target da_get_target_by_id(da_id_type id)
> return mon_storage->target;
> }
>
> +static void da_kfree_cb(struct rcu_head *head)
> +{
> + struct da_monitor_storage *ms =
> + container_of(head, struct da_monitor_storage, rcu);
> +
> + da_monitor_free_hook(&ms->rv.da_mon);
> + kfree(ms);
> +}
> +
> /*
> * da_destroy_storage - destroy the per-object storage
> *
> @@ -564,7 +584,7 @@ static inline void da_destroy_storage(da_id_type id)
> return;
> da_monitor_reset_hook(&mon_storage->rv.da_mon);
> hash_del_rcu(&mon_storage->node);
> - kfree_rcu(mon_storage, rcu);
> + call_rcu(&mon_storage->rcu, da_kfree_cb);
> }
>
> static void __da_monitor_reset_all(void (*reset)(struct da_monitor *))
> @@ -607,6 +627,7 @@ static inline void da_monitor_destroy(void)
> * pending, we can safely assume no concurrent user.
> */
> hash_for_each_safe(da_monitor_ht, bkt, tmp, mon_storage, node) {
> + da_monitor_free_hook(&mon_storage->rv.da_mon);
> hash_del_rcu(&mon_storage->node);
> kfree(mon_storage);
> }
[Severity: High]
Can this code cause a kernel panic on module unload if a dynamically
monitored object was destroyed right before?
Since da_kfree_cb() is defined as a static function in da_monitor.h, it
will be compiled directly into the loadable monitor module's text segment.
If da_destroy_storage() calls call_rcu() just before the module is
unloaded, the RCU core could attempt to execute da_kfree_cb() after the
module's text has been unmapped, causing an instruction page fault.
Should da_monitor_destroy() call rcu_barrier() to wait for these
callbacks before the module unloads?
I noticed follow-up patches in the series add rcu_barrier() for the
pool allocation strategy, but the default auto allocation strategy seems
to be left vulnerable.
> diff --git a/include/rv/ha_monitor.h b/include/rv/ha_monitor.h
> index 499ce60779f9c..99b60d0d26b6d 100644
> --- a/include/rv/ha_monitor.h
> +++ b/include/rv/ha_monitor.h
[ ... ]
> @@ -467,8 +470,15 @@ static inline bool ha_cancel_timer(struct ha_monitor *ha_mon)
> {
> return timer_delete(&ha_mon->timer);
> }
> +/* timer_setup() sets it; the cancel paths here never clear it. */
> +static inline bool ha_timer_ready(struct ha_monitor *ha_mon)
> +{
> + return READ_ONCE(ha_mon->timer.function);
> +}
> static inline void ha_cancel_timer_sync(struct ha_monitor *ha_mon)
> {
> + if (!ha_timer_ready(ha_mon))
> + return;
> timer_delete_sync(&ha_mon->timer);
[Severity: Low]
Since this is the teardown path prior to freeing the storage object, should
this be timer_shutdown_sync() instead?
The kernel timer subsystem guidelines mandate the use of
timer_shutdown_sync() for teardown paths because it permanently prevents
the timer from being re-armed. While concurrent RCU readers cannot reach
the object at this point, using timer_delete_sync() for teardown is a
documented anti-pattern.
--
Sashiko AI review · https://sashiko.dev/#/patchset/cover.1791745088.git.wen.yang@linux.dev?part=4
next prev parent reply other threads:[~2026-10-11 19:51 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-11 19:39 [PATCH v7 00/14] rv: Add task latency over budget RV monitor wen.yang
2026-10-11 19:39 ` [PATCH v7 01/14] rv: Force environment reset action on HA monitor start wen.yang
2026-10-11 19:39 ` [PATCH v7 02/14] rv: Fix ha_monitor timer and invariant underflow wen.yang
2026-10-11 19:39 ` [PATCH v7 03/14] rv: Add a KUnit test for the HA timer underflow wen.yang
2026-10-11 19:52 ` sashiko-bot
2026-10-12 7:47 ` kernel test robot
2026-10-12 9:27 ` kernel test robot
2026-10-12 11:18 ` kernel test robot
2026-10-11 19:39 ` [PATCH v7 04/14] rv: Disarm HA timers on the storage free path wen.yang
2026-10-11 19:51 ` sashiko-bot [this message]
2026-10-11 19:39 ` [PATCH v7 05/14] rv: Add a KUnit test for " wen.yang
2026-10-11 19:50 ` sashiko-bot
2026-10-11 19:39 ` [PATCH v7 06/14] rv: Make da_monitor_reset_hook and EVENT_NONE_LBL overridable wen.yang
2026-10-11 19:53 ` sashiko-bot
2026-10-11 19:39 ` [PATCH v7 07/14] rv: Introduce DA_MON_ALLOCATION_STRATEGY wen.yang
2026-10-11 19:57 ` sashiko-bot
2026-10-11 19:39 ` [PATCH v7 08/14] rv: Add per-object teardown hook da_extra_cleanup wen.yang
2026-10-11 19:54 ` sashiko-bot
2026-10-11 19:39 ` [PATCH v7 09/14] rv: Add generic uprobe infrastructure for RV monitors wen.yang
2026-10-11 19:49 ` sashiko-bot
2026-10-11 19:39 ` [PATCH v7 10/14] rv: Add tlob model DOT file wen.yang
2026-10-11 19:39 ` [PATCH v7 11/14] rv: Add tlob hybrid automaton monitor wen.yang
2026-10-11 19:58 ` sashiko-bot
2026-10-11 19:39 ` [PATCH v7 12/14] rv: Add KUnit tests for the tlob monitor wen.yang
2026-10-11 19:39 ` [PATCH v7 13/14] selftests/verification: Add tlob selftests wen.yang
2026-10-11 19:51 ` sashiko-bot
2026-10-11 19:39 ` [PATCH v7 14/14] selftests/ftrace: Walk up parent dirs to find test.d/functions wen.yang
2026-10-12 11:58 ` [PATCH v7 00/14] rv: Add task latency over budget RV monitor Gabriele Monaco
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=sashiko-outbox-167422@kernel.org \
--to=sashiko-bot@kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
--cc=wen.yang@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.