Race Condition Affecting kernel6.18-tools-debuginfo package, versions <1:6.18.39-79.141.amzn2023


Severity

Recommended
0.0
high
0
10

Based on Amazon Linux security rating.

Threat Intelligence

EPSS
0.13% (3rd percentile)

Do your applications use this vulnerable package?

In a few clicks we can analyze your entire application and see what components are vulnerable in your application, and suggest you quick fixes.

Test your applications
  • Snyk IDSNYK-AMZN2023-KERNEL618TOOLSDEBUGINFO-18907546
  • published18 Aug 2026
  • disclosed25 Jul 2026

Introduced: 25 Jul 2026

NewCVE-2026-64418  (opens in a new tab)
CWE-364  (opens in a new tab)

How to fix?

Upgrade Amazon-Linux:2023 kernel6.18-tools-debuginfo to version 1:6.18.39-79.141.amzn2023 or higher.
This issue was patched in ALAS2023-2026-2045.

NVD Description

Note: Versions mentioned in the description apply only to the upstream kernel6.18-tools-debuginfo package and not the kernel6.18-tools-debuginfo package as distributed by Amazon-Linux. See How to fix? for Amazon-Linux:2023 relevant fixed versions and status.

In the Linux kernel, the following vulnerability has been resolved:

mm: shrinker: fix shrinker_info teardown race with expansion

expand_shrinker_info() iterates all visible memcgs under shrinker_mutex, including memcgs that have not finished ->css_online() yet.

Once pn->shrinker_info has been published, teardown must stay serialized with expand_shrinker_info() until that memcg is either fully online or no longer visible to iteration. Today alloc_shrinker_info() breaks that rule by dropping shrinker_mutex before freeing a partially initialized shrinker_info array, which may cause the following race:

CPU0 CPU1 ==== ====

css_create --> list_add_tail_rcu(&css->sibling, &parent_css->children); online_css --> mem_cgroup_css_online --> alloc_shrinker_info --> alloc node0 info rcu_assign_pointer(C->node0->shrinker_info, old0) alloc node1 info -> FAIL -> goto err mutex_unlock(shrinker_mutex)

                   shrinker_alloc()
                   --&gt; shrinker_memcg_alloc
                       --&gt; mutex_lock(shrinker_mutex)
                           expand_shrinker_info
                           --&gt; mem_cgroup_iter see the memcg
                               expand_one_shrinker_info
                               --&gt; old0 = C-&gt;node0-&gt;shrinker_info
                                   memcpy(new-&gt;unit, old0-&gt;unit, ...);

        free_shrinker_info
        --&amp;gt; kvfree(old0);

                               /* double free !! */
                               kvfree_rcu(old0, rcu);

The same problem exists later in mem_cgroup_css_online(). If alloc_shrinker_info() succeeds but a subsequent objcg allocation fails, the free_objcg -> free_shrinker_info() unwind path tears down the already published pn->shrinker_info arrays without shrinker_mutex. The expand_one_shrinker_info() can race with that teardown in the same way, leading to use-after-free or double-free of the old shrinker_info.

Fix this by serializing shrinker_info teardown with shrinker_mutex, and by keeping alloc_shrinker_info() error cleanup inside the locked section.

CVSS Base Scores

version 3.1