<?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>Mon, 28 Sep 2026 21:30:17 +0000</lastBuildDate>
    <item>
      <title>CVE-2022-49771 — dm ioctl: fix misbehavior if list_versions races with module loading</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2022-49771</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;dm ioctl: fix misbehavior if list_versions races with module loading&lt;/p&gt;
&lt;p&gt;__list_versions will first estimate the required space using the
&amp;#34;dm_target_iterate(list_version_get_needed, &amp;amp;needed)&amp;#34; call and then will
fill the space using the &amp;#34;dm_target_iterate(list_version_get_info,
&amp;amp;iter_info)&amp;#34; call. Each of these calls locks the targets using the
&amp;#34;down_read(&amp;amp;_lock)&amp;#34; and &amp;#34;up_read(&amp;amp;_lock)&amp;#34; calls, however between the first
and second &amp;#34;dm_target_iterate&amp;#34; there is no lock held and the target
modules can be loaded at this point, so the second &amp;#34;dm_target_iterate&amp;#34;
call may need more space than what was the first &amp;#34;dm_target_iterate&amp;#34;
returned.&lt;/p&gt;
&lt;p&gt;The code tries to handle this overflow (see the beginning of
list_version_get_info), however this handling is incorrect.&lt;/p&gt;
&lt;p&gt;The code sets &amp;#34;param-&amp;gt;data_size = param-&amp;gt;data_start + needed&amp;#34; and
&amp;#34;iter_info.end = (char *)vers+len&amp;#34; - &amp;#34;needed&amp;#34; is the size returned by the
first dm_target_iterate call; &amp;#34;len&amp;#34; is the size of the buffer allocated by
userspace.&lt;/p&gt;
&lt;p&gt;&amp;#34;len&amp;#34; may be greater than &amp;#34;needed&amp;#34;; in this case, the code will write up
to &amp;#34;len&amp;#34; bytes into the buffer, however param-&amp;gt;data_size is set to
&amp;#34;needed&amp;#34;, so it may write data past the param-&amp;gt;data_size value. The ioctl
interface copies only up to param-&amp;gt;data_size into userspace, thus part of
the result will be truncated.&lt;/p&gt;
&lt;p&gt;Fix this bug by setting &amp;#34;iter_info.end = (char *)vers + needed;&amp;#34; - this
guarantees that the second &amp;#34;dm_target_iterate&amp;#34; call wi…&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;dm ioctl: fix misbehavior if list_versions races with module loading&lt;/p&gt;
&lt;p&gt;__list_versions will first estimate the required space using the
&amp;#34;dm_target_iterate(list_version_get_needed, &amp;amp;needed)&amp;#34; call and then will
fill the space using the &amp;#34;dm_target_iterate(list_version_get_info,
&amp;amp;iter_info)&amp;#34; call. Each of these calls locks the targets using the
&amp;#34;down_read(&amp;amp;_lock)&amp;#34; and &amp;#34;up_read(&amp;amp;_lock)&amp;#34; calls, however between the first
and second &amp;#34;dm_target_iterate&amp;#34; there is no lock held and the target
modules can be loaded at this point, so the second &amp;#34;dm_target_iterate&amp;#34;
call may need more space than what was the first &amp;#34;dm_target_iterate&amp;#34;
returned.&lt;/p&gt;
&lt;p&gt;The code tries to handle this overflow (see the beginning of
list_version_get_info), however this handling is incorrect.&lt;/p&gt;
&lt;p&gt;The code sets &amp;#34;param-&amp;gt;data_size = param-&amp;gt;data_start + needed&amp;#34; and
&amp;#34;iter_info.end = (char *)vers+len&amp;#34; - &amp;#34;needed&amp;#34; is the size returned by the
first dm_target_iterate call; &amp;#34;len&amp;#34; is the size of the buffer allocated by
userspace.&lt;/p&gt;
&lt;p&gt;&amp;#34;len&amp;#34; may be greater than &amp;#34;needed&amp;#34;; in this case, the code will write up
to &amp;#34;len&amp;#34; bytes into the buffer, however param-&amp;gt;data_size is set to
&amp;#34;needed&amp;#34;, so it may write data past the param-&amp;gt;data_size value. The ioctl
interface copies only up to param-&amp;gt;data_size into userspace, thus part of
the result will be truncated.&lt;/p&gt;
&lt;p&gt;Fix this bug by setting &amp;#34;iter_info.end = (char *)vers + needed;&amp;#34; - this
guarantees that the second &amp;#34;dm_target_iterate&amp;#34; call wi…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2022-49771</guid>
    </item>
  </channel>
</rss>
