{
  "schema_version": "1.6.1",
  "id": "RPI-CVE-2026-80678",
  "modified": "2026-10-09T11:39:44Z",
  "upstream": [
    "CVE-2026-80678"
  ],
  "published": "2026-08-28T06:53:24Z",
  "summary": "i2c: imx: Fix slave registration race and error handling",
  "details": "In the Linux kernel, the following vulnerability has been resolved:\n\ni2c: imx: Fix slave registration race and error handling\n\nIn i2c_imx_reg_slave(), the slave pointer was assigned before\npm_runtime_resume_and_get().  If pm_runtime_resume_and_get() failed,\nthe error path returned without clearing i2c_imx->slave, leaving it\nnon-NULL and causing all subsequent registration attempts to fail\nwith -EBUSY.\n\nAdditionally, because this driver uses a shared IRQ, the interrupt\nhandler i2c_imx_isr() can execute concurrently and, after acquiring\nslave_lock, dereference i2c_imx->slave.  The previous fix attempt\nadded a lockless i2c_imx->slave = NULL on the error path, but that\ncould race with the ISR under the lock and still cause a NULL pointer\ndereference.\n\nFix both issues by deferring the assignment of i2c_imx->slave and\ni2c_imx->last_slave_event to after a successful resume, and by\nperforming the assignment inside the slave_lock critical section.\nThis guarantees that the slave pointer is never left stale on the\nerror path and is always valid when observed by the interrupt handler.",
  "severity": [
    {
      "type": "CVSS_V3",
      "score": "CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
    }
  ],
  "affected": [
    {
      "package": {
        "ecosystem": "Raspberry Pi OS:12",
        "name": "linux"
      },
      "versions": [
        "1:6.1.47-1+rpt4"
      ],
      "ecosystem_specific": {
        "binaries": [
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-2712",
            "binary_version": "1:6.1.47-1+rpt4"
          },
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-v6",
            "binary_version": "1:6.1.47-1+rpt4"
          },
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-v7",
            "binary_version": "1:6.1.47-1+rpt4"
          },
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-v7l",
            "binary_version": "1:6.1.47-1+rpt4"
          },
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-v8",
            "binary_version": "1:6.1.47-1+rpt4"
          }
        ]
      },
      "database_specific": {
        "per_version": {
          "1:6.1.47-1+rpt4": {
            "linux_commit": "655fc658a15ae7a6f37103754adb39ba52a9a14e",
            "upstream_version": "6.1.47",
            "assessment": "commit ancestry (strak rule)",
            "upstream_fixed": "6.1.183",
            "compiled_filter": false
          }
        }
      }
    }
  ],
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://www.cve.org/CVERecord?id=CVE-2026-80678"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/754bc62f72fd64b202462367134ac8ce95b005de"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/cfdf6e13518589f911b7eace6ccb788e4ed87397"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/b9f6f4883b9ac86654e75899d0dbf8a7a96ad5d8"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/d6748f6802f3eebafaa16a5e5dcfbfb9b3bc173f"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/12a4f0950a158d98552cbaeacc35edccd8d975fa"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/614ca6594e301ff682999797c2216e9685558a2b"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/d64ec362c369bbc33833f7936d5f3a706b0d5c45"
    }
  ],
  "database_specific": {
    "source": "https://git.kernel.org/pub/scm/linux/security/vulns.git",
    "upstream_modified": "2026-08-29T06:25:05Z",
    "severity": {
      "source": "kernel CNA",
      "cvss_v3_score": 8.4,
      "cvss_v3_severity": "High",
      "scenario": "AV:L - The bug is in i2c_imx_reg_slave() reached from kernel i2c_slave_register() during driver probe/module bind on embedded i.MX platforms; concurrent exploitation requires local I2C bus activity on the same adapter to fire the shared IRQ handler during registration.\nAC:L - The attacker controls the race by driving I2C slave traffic to trigger i2c_imx_isr() while registration runs, and can retry across reboots, OTA reprobes, or pm_runtime resume cycles until the unprotected slave-pointer window is hit.\nPR:N - No Linux credentials are needed when a physically proximate attacker races automated boot-time or service-driven i2c_slave_register() calls (DT probe, IPMI SSIF/MCTP backends) on imx I2C slave-capable controllers.\nUI:N - Exploitation requires no victim interaction; automated driver probe, suspend/resume, or maintenance-triggered slave registration provides the registration side of the race without user action.\nS:U - Impact is confined to kernel memory safety violations and crash on the same host; this is not a VM escape, IOMMU bypass, or other cross-security-authority boundary.\nC:H - The ISR can dereference a NULL or stale i2c_imx->slave under slave_lock when the error path races registration, violating memory safety and enabling arbitrary kernel read primitives per CVSS race/UAF guidance.\nI:H - Concurrent ISR handling during partial slave registration can corrupt driver state and invoke slave callbacks with inconsistent pointers, enabling heap manipulation and arbitrary kernel write or control-flow hijack beyond a simple crash.\nA:H - NULL or stale slave dereference in i2c_imx_isr()/i2c_imx_slave_event() causes kernel oops/panic; leaving slave non-NULL after failed pm_runtime_resume_and_get() also blocks all subsequent slave registration (-EBUSY) on affected controllers."
    }
  }
}
