<?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 06:26:27 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-74463 — i2c: jz4780: Cache host clock rate at probe to prevent CCF prepare_lock deadlock</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-74463</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;i2c: jz4780: Cache host clock rate at probe to prevent CCF prepare_lock deadlock&lt;/p&gt;
&lt;p&gt;Fix a severe AB/BA deadlock between the Common Clock Framework (CCF)
and the I2C adapter lock, which triggers when an I2C-controlled clock
generator client (like the Si5351) is registered or modified under the CCF.&lt;/p&gt;
&lt;p&gt;During an i2c client clock (generator) frequency change, the CCF acquires its global
&amp;#39;prepare_lock&amp;#39; mutex and the driver calls i2c_transfer() to update the client&amp;#39;s
chip registers, stalling for the adapter&amp;#39;s I2C bus lock.&lt;/p&gt;
&lt;p&gt;Concurrently, an independent, parallel transfer on the same bus (e.g., a GPIO
expander handling LEDs) can hold the I2C adapter lock. Inside this parallel
transfer path, jz4780_i2c_set_speed() calls clk_get_rate() on the host
controller&amp;#39;s input clock to calculate bus timings. This call attempts to acquire
the blocked CCF &amp;#39;prepare_lock&amp;#39;, creating a circular dependency that freezes
the system.&lt;/p&gt;
&lt;p&gt;The jz4780 host controller clock itself is static and never changes at runtime.&lt;/p&gt;
&lt;p&gt;However, calling clk_get_rate() inside the active transfer path introduces
an unnecessary dependency on the CCF internal locks.&lt;/p&gt;
&lt;p&gt;Eliminate this synchronous clk_get_rate() call from the active transfer
path by caching the static host peripheral clock rate once - inside the private
jz4780_i2c structure during jz4780_i2c_probe(). Update jz4780_i2c_set_speed()
to use this cached value, safely decoupling active I2C transactions from t…&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;i2c: jz4780: Cache host clock rate at probe to prevent CCF prepare_lock deadlock&lt;/p&gt;
&lt;p&gt;Fix a severe AB/BA deadlock between the Common Clock Framework (CCF)
and the I2C adapter lock, which triggers when an I2C-controlled clock
generator client (like the Si5351) is registered or modified under the CCF.&lt;/p&gt;
&lt;p&gt;During an i2c client clock (generator) frequency change, the CCF acquires its global
&amp;#39;prepare_lock&amp;#39; mutex and the driver calls i2c_transfer() to update the client&amp;#39;s
chip registers, stalling for the adapter&amp;#39;s I2C bus lock.&lt;/p&gt;
&lt;p&gt;Concurrently, an independent, parallel transfer on the same bus (e.g., a GPIO
expander handling LEDs) can hold the I2C adapter lock. Inside this parallel
transfer path, jz4780_i2c_set_speed() calls clk_get_rate() on the host
controller&amp;#39;s input clock to calculate bus timings. This call attempts to acquire
the blocked CCF &amp;#39;prepare_lock&amp;#39;, creating a circular dependency that freezes
the system.&lt;/p&gt;
&lt;p&gt;The jz4780 host controller clock itself is static and never changes at runtime.&lt;/p&gt;
&lt;p&gt;However, calling clk_get_rate() inside the active transfer path introduces
an unnecessary dependency on the CCF internal locks.&lt;/p&gt;
&lt;p&gt;Eliminate this synchronous clk_get_rate() call from the active transfer
path by caching the static host peripheral clock rate once - inside the private
jz4780_i2c structure during jz4780_i2c_probe(). Update jz4780_i2c_set_speed()
to use this cached value, safely decoupling active I2C transactions from t…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-74463</guid>
    </item>
  </channel>
</rss>
