Skip to content
Heist/ feed
Back to feed
UnratedFix available

HID: ft260: fix stack-use-after-return write in I2C read race

Type: advisorySources: OSV

In the Linux kernel, the following vulnerability has been resolved: HID: ft260: fix stack-use-after-return write in I2C read race ft260_i2c_read() points dev->read_buf at a caller-supplied buffer (often an on-stack variable), arms a completion and waits up to five seconds for the device to return the data. The HID input callback ft260_raw_event() runs in the input/IRQ path, independent of the dev->lock mutex held by the read path, and copies the device-supplied payload into dev->read_buf after a plain NULL check. These two paths share read_buf, read_idx and read_len with no serialization. If the device delays its response until the read times out, ft260_i2c_read() resets the controller, clears read_buf and returns, unwinding the stack frame the buffer lived in. A response that arrives at that moment lets ft260_raw_event() pass the NULL check and then memcpy() the device-controlled payload into the now-freed stack location, a bounded but attacker-influenced stack-use-after-return write triggerable by malicious or malfunctioning hardware. Add a dedicated spinlock that serializes every access to read_buf, read_idx and read_len. ft260_raw_event() now holds it across the NULL check, the memcpy and the index update, while the read path takes it when arming and when clearing the buffer, so the teardown can no longer slip between the check and the copy.

Products
Kernel
Affected versions
Not specified
Fixed versions
5.15.220, 6.1.187, 6.12.108, 6.18.49, 6.6.156, 7.1.11, 7.2.1
CVEs
CVE-2026-80768
Confirmed fixed CVEs
Not specified
Updated in this feed
3 Nov 2026, 10:24 UTC · Revision 1

Source evidence

HID: ft260: fix stack-use-after-return write in I2C read race

core-osv · Original source

Published 4 Sept 2026, 15:12 UTC

In the Linux kernel, the following vulnerability has been resolved: HID: ft260: fix stack-use-after-return write in I2C read race ft260_i2c_read() points dev->read_buf at a caller-supplied buffer (often an on-stack variable), arms a completion and waits up to five seconds for the device to return the data. The HID input callback ft260_raw_event() runs in the input/IRQ path, independent of the dev->lock mutex held by the read path, and copies the device-supplied payload into dev->read_buf after a plain NULL check. These two paths share read_buf, read_idx and read_len with no serialization. If the device delays its response until the read times out, ft260_i2c_read() resets the controller, clears read_buf and returns, unwinding the stack frame the buffer lived in. A response that arrives at that moment lets ft260_raw_event() pass the NULL check and then memcpy() the device-controlled payload into the now-freed stack location, a bounded but attacker-influenced stack-use-after-return write triggerable by malicious or malfunctioning hardware. Add a dedicated spinlock that serializes every access to read_buf, read_idx and read_len. ft260_raw_event() now holds it across the NULL check, the memcpy and the index update, while the read path takes it when arming and when clearing the buffer, so the teardown can no longer slip between the check and the copy.

osv:CVE-2026-80768

Kernel

Fixed versions: 5.15.220, 6.1.187, 6.6.156, 6.12.108, 6.18.49, 7.1.11, 7.2.1

Complete source record
{
  "id": "3fa1e053189c71b631e83789a9f6340267357919daef9134499206f02f0026c2",
  "url": "https://osv.dev/vulnerability/CVE-2026-80768",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "HID: ft260: fix stack-use-after-return write in I2C read race",
    "summary": "In the Linux kernel, the following vulnerability has been resolved: HID: ft260: fix stack-use-after-return write in I2C read race ft260_i2c_read() points dev->read_buf at a caller-supplied buffer (often an on-stack variable), arms a completion and waits up to five seconds for the device to return the data. The HID input callback ft260_raw_event() runs in the input/IRQ path, independent of the dev->lock mutex held by the read path, and copies the device-supplied payload into dev->read_buf after a plain NULL check. These two paths share read_buf, read_idx and read_len with no serialization. If the device delays its response until the read times out, ft260_i2c_read() resets the controller, clears read_buf and returns, unwinding the stack frame the buffer lived in. A response that arrives at that moment lets ft260_raw_event() pass the NULL check and then memcpy() the device-controlled payload into the now-freed stack location, a bounded but attacker-influenced stack-use-after-return write triggerable by malicious or malfunctioning hardware. Add a dedicated spinlock that serializes every access to read_buf, read_idx and read_len. ft260_raw_event() now holds it across the NULL check, the memcpy and the index update, while the read path takes it when arming and when clearing the buffer, so the teardown can no longer slip between the check and the copy.",
    "evidence": "osv:CVE-2026-80768",
    "products": [
      {
        "name": {
          "value": "Kernel",
          "evidence": "/affected/1/package/name"
        },
        "prerequisites": [],
        "fixed_versions": [
          {
            "value": "5.15.220",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "6.1.187",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "6.6.156",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "6.12.108",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "6.18.49",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "7.1.11",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "7.2.1",
            "evidence": "/affected/1/ranges"
          }
        ],
        "affected_versions": []
      }
    ],
    "severity": "unknown",
    "structured": {
      "id": "CVE-2026-80768",
      "aliases": [
        "CVE-2026-80768"
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
              "type": "GIT",
              "events": [
                {
                  "introduced": "6a82582d9fa438045191074856f47165334f2777"
                },
                {
                  "fixed": "2b907001e8a83cdb71e899fd3d77ab51e2c03f10"
                },
                {
                  "fixed": "90e9298f2e4336a0e1ca7eeb173403df78056164"
                },
                {
                  "fixed": "460514d46e8892189fc933a1b4433811cfa5c309"
                },
                {
                  "fixed": "5aa5a1b7cc4b4bec5497ad9ef113fdfe37b232f3"
                },
                {
                  "fixed": "a8e1f970f9040294cfd9100c681c32af6c2aeec0"
                },
                {
                  "fixed": "d7ffbdc076675c84128d5b904e4d5167fe9f3a7f"
                },
                {
                  "fixed": "77832d8f1c81d9f84b6b54807fb278586001d754"
                },
                {
                  "fixed": "bf3e39df3a397fd82967a31d17c4e02c7feab221"
                }
              ]
            }
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-80768.json"
          }
        },
        {
          "ranges": [
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "5.13.0"
                },
                {
                  "fixed": "5.15.220"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "5.16.0"
                },
                {
                  "fixed": "6.1.187"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "6.2.0"
                },
                {
                  "fixed": "6.6.156"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "6.7.0"
                },
                {
                  "fixed": "6.12.108"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "6.13.0"
                },
                {
                  "fixed": "6.18.49"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "6.19.0"
                },
                {
                  "fixed": "7.1.11"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "7.2.0"
                },
                {
                  "fixed": "7.2.1"
                }
              ]
            }
          ],
          "package": {
            "name": "Kernel",
            "ecosystem": "Linux"
          },
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-80768.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:27.807245978Z",
      "provider": "osv",
      "references": [
        "https://git.kernel.org/stable/c/2b907001e8a83cdb71e899fd3d77ab51e2c03f10",
        "https://git.kernel.org/stable/c/460514d46e8892189fc933a1b4433811cfa5c309",
        "https://git.kernel.org/stable/c/5aa5a1b7cc4b4bec5497ad9ef113fdfe37b232f3",
        "https://git.kernel.org/stable/c/77832d8f1c81d9f84b6b54807fb278586001d754",
        "https://git.kernel.org/stable/c/90e9298f2e4336a0e1ca7eeb173403df78056164",
        "https://git.kernel.org/stable/c/a8e1f970f9040294cfd9100c681c32af6c2aeec0",
        "https://git.kernel.org/stable/c/bf3e39df3a397fd82967a31d17c4e02c7feab221",
        "https://git.kernel.org/stable/c/d7ffbdc076675c84128d5b904e4d5167fe9f3a7f",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/80xxx/CVE-2026-80768.json",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-80768",
        "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git"
      ],
      "provider_metadata": {
        "cna_assigner": "Linux",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/80xxx/CVE-2026-80768.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-80768",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": null
  },
  "source_id": "core-osv",
  "document_id": 494473,
  "published_at": "2026-09-04T15:12:40.374+00:00"
}