<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://vulnerability.circl.lu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Wed, 30 Sep 2026 03:38:36 +0000</lastBuildDate>
    <item>
      <title>CVE-2025-22030 — mm: zswap: fix crypto_free_acomp() deadlock in zswap_cpu_comp_dead()</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2025-22030</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;mm: zswap: fix crypto_free_acomp() deadlock in zswap_cpu_comp_dead()&lt;/p&gt;
&lt;p&gt;Currently, zswap_cpu_comp_dead() calls crypto_free_acomp() while holding
the per-CPU acomp_ctx mutex.  crypto_free_acomp() then holds scomp_lock
(through crypto_exit_scomp_ops_async()).&lt;/p&gt;
&lt;p&gt;On the other hand, crypto_alloc_acomp_node() holds the scomp_lock (through
crypto_scomp_init_tfm()), and then allocates memory.  If the allocation
results in reclaim, we may attempt to hold the per-CPU acomp_ctx mutex.&lt;/p&gt;
&lt;p&gt;The above dependencies can cause an ABBA deadlock.  For example in the
following scenario:&lt;/p&gt;
&lt;p&gt;(1) Task A running on CPU #1:
    crypto_alloc_acomp_node()
      Holds scomp_lock
      Enters reclaim
      Reads per_cpu_ptr(pool-&amp;gt;acomp_ctx, 1)&lt;/p&gt;
&lt;p&gt;(2) Task A is descheduled&lt;/p&gt;
&lt;p&gt;(3) CPU #1 goes offline
    zswap_cpu_comp_dead(CPU #1)
      Holds per_cpu_ptr(pool-&amp;gt;acomp_ctx, 1))
      Calls crypto_free_acomp()
      Waits for scomp_lock&lt;/p&gt;
&lt;p&gt;(4) Task A running on CPU #2:
      Waits for per_cpu_ptr(pool-&amp;gt;acomp_ctx, 1) // Read on CPU #1
      DEADLOCK&lt;/p&gt;
&lt;p&gt;Since there is no requirement to call crypto_free_acomp() with the per-CPU
acomp_ctx mutex held in zswap_cpu_comp_dead(), move it after the mutex is
unlocked.  Also move the acomp_request_free() and kfree() calls for
consistency and to avoid any potential sublte locking dependencies in the
future.&lt;/p&gt;
&lt;p&gt;With this, only setting acomp_ctx fields to NULL occurs with the mutex
held.  This is similar to how zswap_cpu_c…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;mm: zswap: fix crypto_free_acomp() deadlock in zswap_cpu_comp_dead()&lt;/p&gt;
&lt;p&gt;Currently, zswap_cpu_comp_dead() calls crypto_free_acomp() while holding
the per-CPU acomp_ctx mutex.  crypto_free_acomp() then holds scomp_lock
(through crypto_exit_scomp_ops_async()).&lt;/p&gt;
&lt;p&gt;On the other hand, crypto_alloc_acomp_node() holds the scomp_lock (through
crypto_scomp_init_tfm()), and then allocates memory.  If the allocation
results in reclaim, we may attempt to hold the per-CPU acomp_ctx mutex.&lt;/p&gt;
&lt;p&gt;The above dependencies can cause an ABBA deadlock.  For example in the
following scenario:&lt;/p&gt;
&lt;p&gt;(1) Task A running on CPU #1:
    crypto_alloc_acomp_node()
      Holds scomp_lock
      Enters reclaim
      Reads per_cpu_ptr(pool-&amp;gt;acomp_ctx, 1)&lt;/p&gt;
&lt;p&gt;(2) Task A is descheduled&lt;/p&gt;
&lt;p&gt;(3) CPU #1 goes offline
    zswap_cpu_comp_dead(CPU #1)
      Holds per_cpu_ptr(pool-&amp;gt;acomp_ctx, 1))
      Calls crypto_free_acomp()
      Waits for scomp_lock&lt;/p&gt;
&lt;p&gt;(4) Task A running on CPU #2:
      Waits for per_cpu_ptr(pool-&amp;gt;acomp_ctx, 1) // Read on CPU #1
      DEADLOCK&lt;/p&gt;
&lt;p&gt;Since there is no requirement to call crypto_free_acomp() with the per-CPU
acomp_ctx mutex held in zswap_cpu_comp_dead(), move it after the mutex is
unlocked.  Also move the acomp_request_free() and kfree() calls for
consistency and to avoid any potential sublte locking dependencies in the
future.&lt;/p&gt;
&lt;p&gt;With this, only setting acomp_ctx fields to NULL occurs with the mutex
held.  This is similar to how zswap_cpu_c…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2025-22030</guid>
    </item>
  </channel>
</rss>
