<?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 17:18:05 +0000</lastBuildDate>
    <item>
      <title>CVE-2024-35979 — raid1: fix use-after-free for original bio in raid1_write_request()</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2024-35979</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;raid1: fix use-after-free for original bio in raid1_write_request()&lt;/p&gt;
&lt;p&gt;r1_bio-&amp;gt;bios[] is used to record new bios that will be issued to
underlying disks, however, in raid1_write_request(), r1_bio-&amp;gt;bios[]
will set to the original bio temporarily. Meanwhile, if blocked rdev
is set, free_r1bio() will be called causing that all r1_bio-&amp;gt;bios[]
to be freed:&lt;/p&gt;
&lt;p&gt;raid1_write_request()
 r1_bio = alloc_r1bio(mddev, bio); -&amp;gt; r1_bio-&amp;gt;bios[] is NULL
 for (i = 0;  i &amp;lt; disks; i++) -&amp;gt; for each rdev in conf
  // first rdev is normal
  r1_bio-&amp;gt;bios[0] = bio; -&amp;gt; set to original bio
  // second rdev is blocked
  if (test_bit(Blocked, &amp;amp;rdev-&amp;gt;flags))
   break&lt;/p&gt;
&lt;p&gt;if (blocked_rdev)
  free_r1bio()
   put_all_bios()
    bio_put(r1_bio-&amp;gt;bios[0]) -&amp;gt; original bio is freed&lt;/p&gt;
&lt;p&gt;Test scripts:&lt;/p&gt;
&lt;p&gt;mdadm -CR /dev/md0 -l1 -n4 /dev/sd[abcd] --assume-clean
fio -filename=/dev/md0 -ioengine=libaio -rw=write -bs=4k -numjobs=1 \
    -iodepth=128 -name=test -direct=1
echo blocked &amp;gt; /sys/block/md0/md/rd2/state&lt;/p&gt;
&lt;p&gt;Test result:&lt;/p&gt;
&lt;p&gt;BUG bio-264 (Not tainted): Object already free
-----------------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;Allocated in mempool_alloc_slab+0x24/0x50 age=1 cpu=1 pid=869
 kmem_cache_alloc+0x324/0x480
 mempool_alloc_slab+0x24/0x50
 mempool_alloc+0x6e/0x220
 bio_alloc_bioset+0x1af/0x4d0
 blkdev_direct_IO+0x164/0x8a0
 blkdev_write_iter+0x309/0x440
 aio_write+0x139/0x2f0
 io_submit_one+0x5ca/0xb70
 __do_sys_io_submit+0x86/0x27…&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;raid1: fix use-after-free for original bio in raid1_write_request()&lt;/p&gt;
&lt;p&gt;r1_bio-&amp;gt;bios[] is used to record new bios that will be issued to
underlying disks, however, in raid1_write_request(), r1_bio-&amp;gt;bios[]
will set to the original bio temporarily. Meanwhile, if blocked rdev
is set, free_r1bio() will be called causing that all r1_bio-&amp;gt;bios[]
to be freed:&lt;/p&gt;
&lt;p&gt;raid1_write_request()
 r1_bio = alloc_r1bio(mddev, bio); -&amp;gt; r1_bio-&amp;gt;bios[] is NULL
 for (i = 0;  i &amp;lt; disks; i++) -&amp;gt; for each rdev in conf
  // first rdev is normal
  r1_bio-&amp;gt;bios[0] = bio; -&amp;gt; set to original bio
  // second rdev is blocked
  if (test_bit(Blocked, &amp;amp;rdev-&amp;gt;flags))
   break&lt;/p&gt;
&lt;p&gt;if (blocked_rdev)
  free_r1bio()
   put_all_bios()
    bio_put(r1_bio-&amp;gt;bios[0]) -&amp;gt; original bio is freed&lt;/p&gt;
&lt;p&gt;Test scripts:&lt;/p&gt;
&lt;p&gt;mdadm -CR /dev/md0 -l1 -n4 /dev/sd[abcd] --assume-clean
fio -filename=/dev/md0 -ioengine=libaio -rw=write -bs=4k -numjobs=1 \
    -iodepth=128 -name=test -direct=1
echo blocked &amp;gt; /sys/block/md0/md/rd2/state&lt;/p&gt;
&lt;p&gt;Test result:&lt;/p&gt;
&lt;p&gt;BUG bio-264 (Not tainted): Object already free
-----------------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;Allocated in mempool_alloc_slab+0x24/0x50 age=1 cpu=1 pid=869
 kmem_cache_alloc+0x324/0x480
 mempool_alloc_slab+0x24/0x50
 mempool_alloc+0x6e/0x220
 bio_alloc_bioset+0x1af/0x4d0
 blkdev_direct_IO+0x164/0x8a0
 blkdev_write_iter+0x309/0x440
 aio_write+0x139/0x2f0
 io_submit_one+0x5ca/0xb70
 __do_sys_io_submit+0x86/0x27…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2024-35979</guid>
    </item>
  </channel>
</rss>
