<?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:17:59 +0000</lastBuildDate>
    <item>
      <title>CVE-2025-71079 — net: nfc: fix deadlock between nfc_unregister_device and rfkill_fop_write</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2025-71079</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux, Siemens SIMATIC S7-1500 CPU 1518-4 PN/DP MFP, Siemens SIMATIC S7-1500 CPU 1518F-4 PN/DP MFP, Siemens SIPLUS S7-1500 CPU 1518-4 PN/DP MFP&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;net: nfc: fix deadlock between nfc_unregister_device and rfkill_fop_write&lt;/p&gt;
&lt;p&gt;A deadlock can occur between nfc_unregister_device() and rfkill_fop_write()
due to lock ordering inversion between device_lock and rfkill_global_mutex.&lt;/p&gt;
&lt;p&gt;The problematic lock order is:&lt;/p&gt;
&lt;p&gt;Thread A (rfkill_fop_write):
  rfkill_fop_write()
    mutex_lock(&amp;amp;rfkill_global_mutex)
      rfkill_set_block()
        nfc_rfkill_set_block()
          nfc_dev_down()
            device_lock(&amp;amp;dev-&amp;gt;dev)    &amp;lt;- waits for device_lock&lt;/p&gt;
&lt;p&gt;Thread B (nfc_unregister_device):
  nfc_unregister_device()
    device_lock(&amp;amp;dev-&amp;gt;dev)
      rfkill_unregister()
        mutex_lock(&amp;amp;rfkill_global_mutex)  &amp;lt;- waits for rfkill_global_mutex&lt;/p&gt;
&lt;p&gt;This creates a classic ABBA deadlock scenario.&lt;/p&gt;
&lt;p&gt;Fix this by moving rfkill_unregister() and rfkill_destroy() outside the
device_lock critical section. Store the rfkill pointer in a local variable
before releasing the lock, then call rfkill_unregister() after releasing
device_lock.&lt;/p&gt;
&lt;p&gt;This change is safe because rfkill_fop_write() holds rfkill_global_mutex
while calling the rfkill callbacks, and rfkill_unregister() also acquires
rfkill_global_mutex before cleanup. Therefore, rfkill_unregister() will
wait for any ongoing callback to complete before proceeding, and
device_del() is only called after rfkill_unregister() returns, preventing
any use-after-free.&lt;/p&gt;
&lt;p&gt;The similar lock ordering in nfc_register_device() (device_lock -&amp;gt;
rfkill_global_mutex v…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux, Siemens SIMATIC S7-1500 CPU 1518-4 PN/DP MFP, Siemens SIMATIC S7-1500 CPU 1518F-4 PN/DP MFP, Siemens SIPLUS S7-1500 CPU 1518-4 PN/DP MFP&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;net: nfc: fix deadlock between nfc_unregister_device and rfkill_fop_write&lt;/p&gt;
&lt;p&gt;A deadlock can occur between nfc_unregister_device() and rfkill_fop_write()
due to lock ordering inversion between device_lock and rfkill_global_mutex.&lt;/p&gt;
&lt;p&gt;The problematic lock order is:&lt;/p&gt;
&lt;p&gt;Thread A (rfkill_fop_write):
  rfkill_fop_write()
    mutex_lock(&amp;amp;rfkill_global_mutex)
      rfkill_set_block()
        nfc_rfkill_set_block()
          nfc_dev_down()
            device_lock(&amp;amp;dev-&amp;gt;dev)    &amp;lt;- waits for device_lock&lt;/p&gt;
&lt;p&gt;Thread B (nfc_unregister_device):
  nfc_unregister_device()
    device_lock(&amp;amp;dev-&amp;gt;dev)
      rfkill_unregister()
        mutex_lock(&amp;amp;rfkill_global_mutex)  &amp;lt;- waits for rfkill_global_mutex&lt;/p&gt;
&lt;p&gt;This creates a classic ABBA deadlock scenario.&lt;/p&gt;
&lt;p&gt;Fix this by moving rfkill_unregister() and rfkill_destroy() outside the
device_lock critical section. Store the rfkill pointer in a local variable
before releasing the lock, then call rfkill_unregister() after releasing
device_lock.&lt;/p&gt;
&lt;p&gt;This change is safe because rfkill_fop_write() holds rfkill_global_mutex
while calling the rfkill callbacks, and rfkill_unregister() also acquires
rfkill_global_mutex before cleanup. Therefore, rfkill_unregister() will
wait for any ongoing callback to complete before proceeding, and
device_del() is only called after rfkill_unregister() returns, preventing
any use-after-free.&lt;/p&gt;
&lt;p&gt;The similar lock ordering in nfc_register_device() (device_lock -&amp;gt;
rfkill_global_mutex v…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2025-71079</guid>
    </item>
  </channel>
</rss>
