<?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>Tue, 29 Sep 2026 01:17:42 +0000</lastBuildDate>
    <item>
      <title>CVE-2022-49789 — scsi: zfcp: Fix double free of FSF request when qdio send fails</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2022-49789</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;scsi: zfcp: Fix double free of FSF request when qdio send fails&lt;/p&gt;
&lt;p&gt;We used to use the wrong type of integer in &amp;#39;zfcp_fsf_req_send()&amp;#39; to cache
the FSF request ID when sending a new FSF request. This is used in case the
sending fails and we need to remove the request from our internal hash
table again (so we don&amp;#39;t keep an invalid reference and use it when we free
the request again).&lt;/p&gt;
&lt;p&gt;In &amp;#39;zfcp_fsf_req_send()&amp;#39; we used to cache the ID as &amp;#39;int&amp;#39; (signed and 32
bit wide), but the rest of the zfcp code (and the firmware specification)
handles the ID as &amp;#39;unsigned long&amp;#39;/&amp;#39;u64&amp;#39; (unsigned and 64 bit wide [s390x
ELF ABI]).  For one this has the obvious problem that when the ID grows
past 32 bit (this can happen reasonably fast) it is truncated to 32 bit
when storing it in the cache variable and so doesn&amp;#39;t match the original ID
anymore.  The second less obvious problem is that even when the original ID
has not yet grown past 32 bit, as soon as the 32nd bit is set in the
original ID (0x80000000 = 2&amp;#39;147&amp;#39;483&amp;#39;648) we will have a mismatch when we
cast it back to &amp;#39;unsigned long&amp;#39;. As the cached variable is of a signed
type, the compiler will choose a sign-extending instruction to load the 32
bit variable into a 64 bit register (e.g.: &amp;#39;lgf %r11,188(%r15)&amp;#39;). So once
we pass the cached variable into &amp;#39;zfcp_reqlist_find_rm()&amp;#39; to remove the
request again all the leading zeros will be flipped to ones to extend the
sign and won&amp;#39;t match the…&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;scsi: zfcp: Fix double free of FSF request when qdio send fails&lt;/p&gt;
&lt;p&gt;We used to use the wrong type of integer in &amp;#39;zfcp_fsf_req_send()&amp;#39; to cache
the FSF request ID when sending a new FSF request. This is used in case the
sending fails and we need to remove the request from our internal hash
table again (so we don&amp;#39;t keep an invalid reference and use it when we free
the request again).&lt;/p&gt;
&lt;p&gt;In &amp;#39;zfcp_fsf_req_send()&amp;#39; we used to cache the ID as &amp;#39;int&amp;#39; (signed and 32
bit wide), but the rest of the zfcp code (and the firmware specification)
handles the ID as &amp;#39;unsigned long&amp;#39;/&amp;#39;u64&amp;#39; (unsigned and 64 bit wide [s390x
ELF ABI]).  For one this has the obvious problem that when the ID grows
past 32 bit (this can happen reasonably fast) it is truncated to 32 bit
when storing it in the cache variable and so doesn&amp;#39;t match the original ID
anymore.  The second less obvious problem is that even when the original ID
has not yet grown past 32 bit, as soon as the 32nd bit is set in the
original ID (0x80000000 = 2&amp;#39;147&amp;#39;483&amp;#39;648) we will have a mismatch when we
cast it back to &amp;#39;unsigned long&amp;#39;. As the cached variable is of a signed
type, the compiler will choose a sign-extending instruction to load the 32
bit variable into a 64 bit register (e.g.: &amp;#39;lgf %r11,188(%r15)&amp;#39;). So once
we pass the cached variable into &amp;#39;zfcp_reqlist_find_rm()&amp;#39; to remove the
request again all the leading zeros will be flipped to ones to extend the
sign and won&amp;#39;t match the…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2022-49789</guid>
    </item>
  </channel>
</rss>
