<?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 19:25:42 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-89960 — s390/vfio-ap: fix stale pqap_hook pointer on error in vfio_ap_mdev_set_kvm()</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-89960</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;s390/vfio-ap: fix stale pqap_hook pointer on error in vfio_ap_mdev_set_kvm()&lt;/p&gt;
&lt;p&gt;In vfio_ap_mdev_set_kvm(), kvm-&amp;gt;arch.crypto.pqap_hook is set to
&amp;amp;matrix_mdev-&amp;gt;pqap_hook before the update locks are acquired and the
mdev list is checked for a conflicting assignment. If another mdev is
already attached to the same KVM instance, the function returns -EPERM
without restoring the hook pointer, leaving kvm-&amp;gt;arch.crypto.pqap_hook
pointing at the failing matrix_mdev instead of the mdev that legitimately
owns the KVM.&lt;/p&gt;
&lt;p&gt;Since matrix_mdev-&amp;gt;kvm is never set on this error path,
vfio_ap_mdev_unset_kvm() will not clean up the hook when matrix_mdev
is later closed. If matrix_mdev is subsequently freed, any PQAP
instruction executed by the guest will dereference the stale pointer
through pqap_hook_rwsem, resulting in a use-after-free.&lt;/p&gt;
&lt;p&gt;Since kvm-&amp;gt;arch.crypto.pqap_hook is only set in the vfio_ap_mdev_set_kvm()
function and is cleared in the vfio_ap_mdev_unset_kvm() function, a check
for &amp;#39;kvm-&amp;gt;arch.crypto.pqap_hook != NULL&amp;#39; is all that is needed to determine
whether it belongs to another mdev. This will alleviate the need to iterate
the matrix_dev-&amp;gt;mdev_list list to see if the kvm object is assigned to
another mdev.This was introduced in v3 to alleviate the need to take the
mdevs_lock while iterating the list; however, this did not prevent a
potential race condition.&lt;/p&gt;
&lt;p&gt;The pqap_hook_rwsem(write) is now performed inside
get_update_…&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;s390/vfio-ap: fix stale pqap_hook pointer on error in vfio_ap_mdev_set_kvm()&lt;/p&gt;
&lt;p&gt;In vfio_ap_mdev_set_kvm(), kvm-&amp;gt;arch.crypto.pqap_hook is set to
&amp;amp;matrix_mdev-&amp;gt;pqap_hook before the update locks are acquired and the
mdev list is checked for a conflicting assignment. If another mdev is
already attached to the same KVM instance, the function returns -EPERM
without restoring the hook pointer, leaving kvm-&amp;gt;arch.crypto.pqap_hook
pointing at the failing matrix_mdev instead of the mdev that legitimately
owns the KVM.&lt;/p&gt;
&lt;p&gt;Since matrix_mdev-&amp;gt;kvm is never set on this error path,
vfio_ap_mdev_unset_kvm() will not clean up the hook when matrix_mdev
is later closed. If matrix_mdev is subsequently freed, any PQAP
instruction executed by the guest will dereference the stale pointer
through pqap_hook_rwsem, resulting in a use-after-free.&lt;/p&gt;
&lt;p&gt;Since kvm-&amp;gt;arch.crypto.pqap_hook is only set in the vfio_ap_mdev_set_kvm()
function and is cleared in the vfio_ap_mdev_unset_kvm() function, a check
for &amp;#39;kvm-&amp;gt;arch.crypto.pqap_hook != NULL&amp;#39; is all that is needed to determine
whether it belongs to another mdev. This will alleviate the need to iterate
the matrix_dev-&amp;gt;mdev_list list to see if the kvm object is assigned to
another mdev.This was introduced in v3 to alleviate the need to take the
mdevs_lock while iterating the list; however, this did not prevent a
potential race condition.&lt;/p&gt;
&lt;p&gt;The pqap_hook_rwsem(write) is now performed inside
get_update_…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-89960</guid>
    </item>
  </channel>
</rss>
