<?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>Fri, 02 Oct 2026 14:36:56 +0000</lastBuildDate>
    <item>
      <title>CVE-2024-26757 — md: Don't ignore read-only array in md_check_recovery()</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2024-26757</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;md: Don&amp;#39;t ignore read-only array in md_check_recovery()&lt;/p&gt;
&lt;p&gt;Usually if the array is not read-write, md_check_recovery() won&amp;#39;t
register new sync_thread in the first place. And if the array is
read-write and sync_thread is registered, md_set_readonly() will
unregister sync_thread before setting the array read-only. md/raid
follow this behavior hence there is no problem.&lt;/p&gt;
&lt;p&gt;After commit f52f5c71f3d4 (&amp;#34;md: fix stopping sync thread&amp;#34;), following
hang can be triggered by test shell/integrity-caching.sh:&lt;/p&gt;
&lt;p&gt;1) array is read-only. dm-raid update super block:
rs_update_sbs
 ro = mddev-&amp;gt;ro
 mddev-&amp;gt;ro = 0
  -&amp;gt; set array read-write
 md_update_sb&lt;/p&gt;
&lt;p&gt;2) register new sync thread concurrently.&lt;/p&gt;
&lt;p&gt;3) dm-raid set array back to read-only:
rs_update_sbs
 mddev-&amp;gt;ro = ro&lt;/p&gt;
&lt;p&gt;4) stop the array:
raid_dtr
 md_stop
  stop_sync_thread
    set_bit(MD_RECOVERY_INTR, &amp;amp;mddev-&amp;gt;recovery);
    md_wakeup_thread_directly(mddev-&amp;gt;sync_thread);
    wait_event(..., !test_bit(MD_RECOVERY_RUNNING, &amp;amp;mddev-&amp;gt;recovery))&lt;/p&gt;
&lt;p&gt;5) sync thread done:
 md_do_sync
 set_bit(MD_RECOVERY_DONE, &amp;amp;mddev-&amp;gt;recovery);
 md_wakeup_thread(mddev-&amp;gt;thread);&lt;/p&gt;
&lt;p&gt;6) daemon thread can&amp;#39;t unregister sync thread:
 md_check_recovery
  if (!md_is_rdwr(mddev) &amp;amp;&amp;amp;
      !test_bit(MD_RECOVERY_NEEDED, &amp;amp;mddev-&amp;gt;recovery))
   return;
  -&amp;gt; -&amp;gt; MD_RECOVERY_RUNNING can&amp;#39;t be cleared, hence step 4 hang;&lt;/p&gt;
&lt;p&gt;The root cause is that dm-raid manipulate &amp;#39;mddev-&amp;gt;ro&amp;#39; by itself,
however, dm-raid really should stop sync thread b…&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;md: Don&amp;#39;t ignore read-only array in md_check_recovery()&lt;/p&gt;
&lt;p&gt;Usually if the array is not read-write, md_check_recovery() won&amp;#39;t
register new sync_thread in the first place. And if the array is
read-write and sync_thread is registered, md_set_readonly() will
unregister sync_thread before setting the array read-only. md/raid
follow this behavior hence there is no problem.&lt;/p&gt;
&lt;p&gt;After commit f52f5c71f3d4 (&amp;#34;md: fix stopping sync thread&amp;#34;), following
hang can be triggered by test shell/integrity-caching.sh:&lt;/p&gt;
&lt;p&gt;1) array is read-only. dm-raid update super block:
rs_update_sbs
 ro = mddev-&amp;gt;ro
 mddev-&amp;gt;ro = 0
  -&amp;gt; set array read-write
 md_update_sb&lt;/p&gt;
&lt;p&gt;2) register new sync thread concurrently.&lt;/p&gt;
&lt;p&gt;3) dm-raid set array back to read-only:
rs_update_sbs
 mddev-&amp;gt;ro = ro&lt;/p&gt;
&lt;p&gt;4) stop the array:
raid_dtr
 md_stop
  stop_sync_thread
    set_bit(MD_RECOVERY_INTR, &amp;amp;mddev-&amp;gt;recovery);
    md_wakeup_thread_directly(mddev-&amp;gt;sync_thread);
    wait_event(..., !test_bit(MD_RECOVERY_RUNNING, &amp;amp;mddev-&amp;gt;recovery))&lt;/p&gt;
&lt;p&gt;5) sync thread done:
 md_do_sync
 set_bit(MD_RECOVERY_DONE, &amp;amp;mddev-&amp;gt;recovery);
 md_wakeup_thread(mddev-&amp;gt;thread);&lt;/p&gt;
&lt;p&gt;6) daemon thread can&amp;#39;t unregister sync thread:
 md_check_recovery
  if (!md_is_rdwr(mddev) &amp;amp;&amp;amp;
      !test_bit(MD_RECOVERY_NEEDED, &amp;amp;mddev-&amp;gt;recovery))
   return;
  -&amp;gt; -&amp;gt; MD_RECOVERY_RUNNING can&amp;#39;t be cleared, hence step 4 hang;&lt;/p&gt;
&lt;p&gt;The root cause is that dm-raid manipulate &amp;#39;mddev-&amp;gt;ro&amp;#39; by itself,
however, dm-raid really should stop sync thread b…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2024-26757</guid>
    </item>
  </channel>
</rss>
