All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: wen.yang@linux.dev
Cc: linux-trace-kernel@vger.kernel.org
Subject: Re: [PATCH v7 08/14] rv: Add per-object teardown hook da_extra_cleanup
Date: Sun, 11 Oct 2026 19:54:10 +0000	[thread overview]
Message-ID: <sashiko-outbox-167428@kernel.org> (raw)
In-Reply-To: <68b2e41332eb12ebcd07383402ca6cac1a83b429.1791745088.git.wen.yang@linux.dev>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] rv: missing rcu_barrier() for non-pool allocations causes UAF on module unload
--

commit f8013d6f70621f02511ed8a820d487338e72eed7
Author: Wen Yang <wen.yang@linux.dev>

rv: Add per-object teardown hook da_extra_cleanup

da_monitor_destroy() frees each per-object storage, but a monitor
whose target is allocated separately has no point to free it: the
target is still reachable from the storage until hash_del_rcu().
Add an optional da_extra_cleanup() hook, called for each storage after
da_monitor_free_hook() has disarmed its timer and before the storage is
unlinked. It defaults to a no-op. tlob, added later in this series,
uses it to retire and free its per-window record.

> diff --git a/include/rv/da_monitor.h b/include/rv/da_monitor.h
> index 7d1026e9edbc6..04caaf529034b 100644
> --- a/include/rv/da_monitor.h
> +++ b/include/rv/da_monitor.h

[ ... ]

> @@ -715,7 +725,9 @@ 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) {
> +		/* Before da_extra_cleanup(): it frees what the timer reads. */
>  		da_monitor_free_hook(&mon_storage->rv.da_mon);
> +		da_extra_cleanup(&mon_storage->rv.da_mon);
>  		hash_del_rcu(&mon_storage->node);
>  		if (DA_MON_ALLOCATION_STRATEGY == DA_ALLOC_POOL)
>  			mempool_free(mon_storage, &da_monitor_pool);

[Severity: High]
Does this missing rcu_barrier() for non-pool allocations cause a use-after-free
on module unload?

Further down in da_monitor_destroy(), rcu_barrier() is only called for
DA_ALLOC_POOL allocations:

include/rv/da_monitor.h:da_monitor_destroy() {
	...
	if (DA_MON_ALLOCATION_STRATEGY == DA_ALLOC_POOL) {
		rcu_barrier();
		mempool_exit(&da_monitor_pool);
	}
}

When a monitor using DA_ALLOC_AUTO or DA_ALLOC_MANUAL is active and an event
calls da_destroy_storage(), it queues the da_kfree_cb() callback:

include/rv/da_monitor.h:da_destroy_storage() {
	...
	if (DA_MON_ALLOCATION_STRATEGY == DA_ALLOC_POOL)
		call_rcu(&mon_storage->rcu, da_pool_return_cb);
	else
		call_rcu(&mon_storage->rcu, da_kfree_cb);
}

Because da_kfree_cb() is a static function in this header, its code resides
in the loadable module of the specific monitor.

If the user unloads the monitor module immediately after a monitored object is
destroyed, da_monitor_destroy() is called during the module exit path. Since
there is no rcu_barrier() for non-pool allocations, the module's text segment
is unmapped while da_kfree_cb() is still pending in the RCU queues.

This leads to a kernel panic when the RCU core attempts to execute the unmapped
callback.

Should the rcu_barrier() be called unconditionally so that all pending
RCU callbacks finish executing before the module exits and its memory is
unmapped?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/cover.1791745088.git.wen.yang@linux.dev?part=8

  reply	other threads:[~2026-10-11 19:54 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
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 [this message]
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-167428@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.