CVE-2026-46025: mm/damon/core: fix damon_call() vs kdamond_fn() exit race
In the Linux kernel, the following vulnerability has been resolved:
mm/damon/core: fix damon_call() vs kdamond_fn() exit race
Patch series "mm/damon/core: fix damon_call()/damos_walk() vs kdmond exit
race".
damon_call() and damos_walk() can leak memory and/or deadlock when they
race with kdamond terminations. Fix those.
This patch (of 2);
When kdamond_fn() main loop is finished, the function cancels all
remaining damon_call() requests and unset the damon_ctx->kdamond so that
API callers and API functions themselves can know the context is
terminated. damon_call() adds the caller's request to the queue first.
After that, it shows if the kdamond of the damon_ctx is still running
(damon_ctx->kdamond is set). Only if the kdamond is running, damon_call()
starts waiting for the kdamond's handling of the newly added request.
The damon_call() requests registration and damon_ctx->kdamond unset are
protected by different mutexes, though. Hence, damon_call() could race
with damon_ctx->kdamond unset, and result in deadlocks.
For example, let's suppose kdamond successfully finished the damon_call()
requests cancelling. Right after that, damon_call() is called for the
context. It registers the new request, and shows the context is still
running, because damon_ctx->kdamond unset is not yet done. Hence the
damon_call() caller starts waiting for the handling of the request.
However, the kdamond is already on the termination steps, so it never
handles the new request. As a result, the damon_call() caller threads
infinitely waits.
Fix this by introducing another damon_ctx field, namely
call_controls_obsolete. It is protected by the
damon_ctx->call_controls_lock, which protects damon_call() requests
registration. Initialize (unset) it in kdamond_fn() before letting
damon_start() returns and set it just before the cancelling of remaining
damon_call() requests is executed. damon_call() reads the obsolete field
under the lock and avoids adding a new request.
After this change, only requests that are guaranteed to be handled or
cancelled are registered. Hence the after-registration DAMON context
termination check is no longer needed. Remove it together.
Note that the deadlock will not happen when damon_call() is called for
repeat mode request. In tis case, damon_call() returns instead of waiting
for the handling when the request registration succeeds and it shows the
kdamond is running. However, if the request also has dealloc_on_cancel,
the request memory would be leaked.
The issue is found by sashiko [1].
Security readout for executives and security teams
Plain-English summary
This Linux kernel issue is a race condition in DAMON, the kernel Data Access Monitor. Under specific shutdown timing, a caller can wait forever or leak request memory. The source does not show remote exploitation, privilege requirements, or real-world attacks, so business urgency depends on whether affected kernels and DAMON-related features are in use.
Executive priority
Treat this as a kernel maintenance item with elevated priority for hosts using DAMON or custom kernels. There is a credible stability risk, but the source does not justify emergency incident response or active-exploitation assumptions.
Technical view
The flaw is in mm/damon/core. damon_call() or damos_walk() can register requests while kdamond_fn() is terminating because request registration and kdamond state changes use different locks. A request may then never be handled or cancelled, causing an indefinite wait; repeat requests with dealloc_on_cancel may leak memory.
Likely exposure
Exposure appears limited to Linux systems running affected kernel versions or downstream builds containing the vulnerable DAMON code. The provided affected-version data is incomplete and partly inconsistent, so confirm exposure through vendor kernel advisories, package changelogs, or the referenced stable commits.
Exploitation context
The bundle reports no CISA KEV listing and provides no evidence of active exploitation. It describes a kernel race causing deadlock or memory leak, but does not establish remote reachability, attacker privileges, or a public exploit path.
Researcher notes
Key uncertainty is reachability. The record documents the race and fix rationale, but not triggering interfaces, privilege boundaries, or impacted distributions. Validate by mapping the deployed kernel tree to the stable commits and reviewing local DAMON usage paths.
Mitigation direction
Apply vendor kernel updates that include the referenced DAMON stable fixes.
Check distribution advisories for fixed package versions before broad rollout.
Prioritize systems using DAMON, memory monitoring, or custom kernel builds.
Use normal kernel reboot procedures after patch installation.
Avoid claiming mitigation by configuration unless vendor guidance confirms it.
Validation and detection
Inventory running kernel versions and downstream package release IDs.
Compare kernel source or changelog against the referenced stable commits.
Check whether DAMON-related functionality is enabled or operationally used.
Review vendor advisories for exact affected and fixed versions.
Test patched kernels in staging for workload and monitoring regressions.
Generated from the cited source records. This long-tail analysis has not been individually reviewed by a named human.
Potential ATT&CK relevance
Conservative CVE-to-ATT&CK context
These mappings and lookup hints may be relevant to the vulnerability behavior, CWE, affected product, or exposure path. Glexia-inferred context is not an official MITRE, ATT&CK, CWE, or CVE Program mapping.
ATT&CK lookup starting points
Use these exact CWE pages and searches to review the Glexia ATT&CK library from this CVE's weakness and description context.
cve · low confidence lookup
CVE-2026-46025 mapping review
Open the CVE-to-ATT&CK bridge for reviewed, inferred, or future official mappings tied to this CVE.
These fields come from the CVE record and ADP containers, not from Glexia's Take. They preserve time-varying source decisions such as CISA SSVC, KEV status, CVSS metrics, and provider references.
0CVSS vectors
3Timeline events
0ADP providers
4Source links
Vulnerability timeline
Timeline events are normalized from CVE metadata, CNA source timelines, ADP timelines, and KEV metadata when present.
CVE reservedCVE Program
The CVE ID was reserved by the assigning CNA.
CVE publishedCVE Program
The CVE record was published.
May 27, 2026, 12:56 UTC (UTC+00:00)
CVE updatedCVE Program
The CVE record metadata indicates this as the latest update time.