<?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 18:14:11 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-23355 — ata: libata: cancel pending work after clearing deferred_qc</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-23355</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;ata: libata: cancel pending work after clearing deferred_qc&lt;/p&gt;
&lt;p&gt;Syzbot reported a WARN_ON() in ata_scsi_deferred_qc_work(), caused by
ap-&amp;gt;ops-&amp;gt;qc_defer() returning non-zero before issuing the deferred qc.&lt;/p&gt;
&lt;p&gt;ata_scsi_schedule_deferred_qc() is called during each command completion.
This function will check if there is a deferred QC, and if
ap-&amp;gt;ops-&amp;gt;qc_defer() returns zero, meaning that it is possible to queue the
deferred qc at this time (without being deferred), then it will queue the
work which will issue the deferred qc.&lt;/p&gt;
&lt;p&gt;Once the work get to run, which can potentially be a very long time after
the work was scheduled, there is a WARN_ON() if ap-&amp;gt;ops-&amp;gt;qc_defer() returns
non-zero.&lt;/p&gt;
&lt;p&gt;While we hold the ap-&amp;gt;lock both when assigning and clearing deferred_qc,
and the work itself holds the ap-&amp;gt;lock, the code currently does not cancel
the work after clearing the deferred qc.&lt;/p&gt;
&lt;p&gt;This means that the following scenario can happen:
1) One or several NCQ commands are queued.
2) A non-NCQ command is queued, gets stored in ap-&amp;gt;deferred_qc.
3) Last NCQ command gets completed, work is queued to issue the deferred
   qc.
4) Timeout or error happens, ap-&amp;gt;deferred_qc is cleared. The queued work is
   currently NOT canceled.
5) Port is reset.
6) One or several NCQ commands are queued.
7) A non-NCQ command is queued, gets stored in ap-&amp;gt;deferred_qc.
8) Work is finally run. Yet at this time, there is still NCQ commands in
   flight.&lt;/p&gt;
&lt;p&gt;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;ata: libata: cancel pending work after clearing deferred_qc&lt;/p&gt;
&lt;p&gt;Syzbot reported a WARN_ON() in ata_scsi_deferred_qc_work(), caused by
ap-&amp;gt;ops-&amp;gt;qc_defer() returning non-zero before issuing the deferred qc.&lt;/p&gt;
&lt;p&gt;ata_scsi_schedule_deferred_qc() is called during each command completion.
This function will check if there is a deferred QC, and if
ap-&amp;gt;ops-&amp;gt;qc_defer() returns zero, meaning that it is possible to queue the
deferred qc at this time (without being deferred), then it will queue the
work which will issue the deferred qc.&lt;/p&gt;
&lt;p&gt;Once the work get to run, which can potentially be a very long time after
the work was scheduled, there is a WARN_ON() if ap-&amp;gt;ops-&amp;gt;qc_defer() returns
non-zero.&lt;/p&gt;
&lt;p&gt;While we hold the ap-&amp;gt;lock both when assigning and clearing deferred_qc,
and the work itself holds the ap-&amp;gt;lock, the code currently does not cancel
the work after clearing the deferred qc.&lt;/p&gt;
&lt;p&gt;This means that the following scenario can happen:
1) One or several NCQ commands are queued.
2) A non-NCQ command is queued, gets stored in ap-&amp;gt;deferred_qc.
3) Last NCQ command gets completed, work is queued to issue the deferred
   qc.
4) Timeout or error happens, ap-&amp;gt;deferred_qc is cleared. The queued work is
   currently NOT canceled.
5) Port is reset.
6) One or several NCQ commands are queued.
7) A non-NCQ command is queued, gets stored in ap-&amp;gt;deferred_qc.
8) Work is finally run. Yet at this time, there is still NCQ commands in
   flight.&lt;/p&gt;
&lt;p&gt;The…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-23355</guid>
    </item>
  </channel>
</rss>
