Description
In the Linux kernel, the following vulnerability has been resolved:

usb: typec: ucsi: ccg: reject firmware images without a ':' record header

do_flash() locates the first .cyacd record with

p = strnchr(fw->data, fw->size, ':');
while (p < eof) {
s = strnchr(p + 1, eof - p - 1, ':');
...
}

If the firmware image contains no ':' byte, strnchr() returns NULL.
NULL compares less than the valid kernel pointer eof, so the loop body
runs and strnchr() is called with p + 1 == (void *)1 and a length of
roughly (unsigned long)eof, causing a wonderful crash.

The not_signed_fw fallthrough earlier in do_flash() and the chip-state
branches in ccg_fw_update_needed() allow an unsigned blob to reach this
loop, so a root user who can place a crafted file under /lib/firmware
and write the do_flash sysfs attribute can trigger the oops.

Bail out with -EINVAL when the initial strnchr() returns NULL.
Published: 2026-07-19
Score: 5.5 Medium
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

The vulnerability exists in the Linux kernel’s USB‑Type‑C UCSI firmware update path, where firmware images lacking a ':' record header are processed without proper validation. When such a firmware image is written to the do_flash sysfs attribute, the kernel mistakenly treats a NULL pointer as a valid address and performs an out‑of‑bounds read, causing a kernel panic. The flaw surfaces when an unsigned firmware blob is placed in /lib/firmware and then flashed. This results in a loss of system availability for the affected host, as the kernel crashes and requires a reboot.

Affected Systems

All users running the Linux kernel before the commit that added the missing header check are affected. The flaw resides in the usb:typec:ucsi:ccg subsystem and applies to any kernel that implements the UCSI firmware update path. No particular kernel versions are enumerated in the advisory, so any kernel build that predates the patch may be vulnerable.

Risk and Exploitability

The EPSS score is below 1 % and the vulnerability is not listed in CISA’s KEV catalog, indicating a low expected exploitation probability. However, the attack requires local root privileges to place a crafted firmware file in /lib/firmware and to write to the do_flash sysfs attribute. Once those prerequisites are met, the exploit can be executed immediately and will crash the kernel. Non‑privileged users cannot exploit the flaw, and there is no remote exploitation vector identified.

Generated by OpenCVE AI on August 4, 2026 at 18:10 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade the Linux kernel to the latest released version that includes the commit adding the missing header validation.
  • Remove or replace any unsigned firmware files in /lib/firmware that do not contain a valid ':' record header with properly formatted or signed images.
  • Restrict write access to the do_flash sysfs attribute so that only trusted system components or privileged users with strict SELinux/AppArmor profiles can trigger firmware updates.

Generated by OpenCVE AI on August 4, 2026 at 18:10 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Ubuntu USN Ubuntu USN USN-8593-1 Linux kernel vulnerabilities
Ubuntu USN Ubuntu USN USN-8603-1 Linux kernel (Azure) vulnerabilities
Ubuntu USN Ubuntu USN USN-8618-1 Linux kernel vulnerabilities
History

Wed, 22 Jul 2026 00:15:00 +0000

Type Values Removed Values Added
References
Metrics threat_severity

None

cvssV3_1

{'score': 5.5, 'vector': 'CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H'}

threat_severity

Low


Tue, 21 Jul 2026 23:30:00 +0000

Type Values Removed Values Added
Weaknesses CWE-476

Sun, 19 Jul 2026 15:30:00 +0000

Type Values Removed Values Added
Description In the Linux kernel, the following vulnerability has been resolved: usb: typec: ucsi: ccg: reject firmware images without a ':' record header do_flash() locates the first .cyacd record with p = strnchr(fw->data, fw->size, ':'); while (p < eof) { s = strnchr(p + 1, eof - p - 1, ':'); ... } If the firmware image contains no ':' byte, strnchr() returns NULL. NULL compares less than the valid kernel pointer eof, so the loop body runs and strnchr() is called with p + 1 == (void *)1 and a length of roughly (unsigned long)eof, causing a wonderful crash. The not_signed_fw fallthrough earlier in do_flash() and the chip-state branches in ccg_fw_update_needed() allow an unsigned blob to reach this loop, so a root user who can place a crafted file under /lib/firmware and write the do_flash sysfs attribute can trigger the oops. Bail out with -EINVAL when the initial strnchr() returns NULL.
Title usb: typec: ucsi: ccg: reject firmware images without a ':' record header
First Time appeared Linux
Linux linux Kernel
CPEs cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
Vendors & Products Linux
Linux linux Kernel
References

Subscriptions

Linux Linux Kernel
cve-icon MITRE

Status: PUBLISHED

Assigner: Linux

Published:

Updated: 2026-07-20T06:41:45.132Z

Reserved: 2026-07-19T07:54:57.024Z

Link: CVE-2026-63964

cve-icon Vulnrichment

No data.

cve-icon NVD

No data.

cve-icon Redhat

Severity : Low

Publid Date: 2026-07-19T00:00:00Z

Links: CVE-2026-63964 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-08-04T18:15:03Z

Weaknesses