Bug 2502428 (CVE-2026-63964) - CVE-2026-63964 kernel: usb: typec: ucsi: ccg: reject firmware images without a ':' record header
Summary: CVE-2026-63964 kernel: usb: typec: ucsi: ccg: reject firmware images without ...
Keywords:
Status: NEW
Alias: CVE-2026-63964
Product: Security Response
Classification: Other
Component: vulnerability
Version: unspecified
Hardware: All
OS: Linux
low
low
Target Milestone: ---
Assignee: Product Security
QA Contact:
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2026-07-19 16:07 UTC by OSIDB Bzimport
Modified: 2026-07-21 16:55 UTC (History)
2 users (show)

Fixed In Version:
Clone Of:
Environment:
Last Closed:
Embargoed:


Attachments (Terms of Use)

Description OSIDB Bzimport 2026-07-19 16:07:36 UTC
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.

Comment 1 Mauro Matteo Cascella 2026-07-21 16:52:46 UTC
Upstream advisory:
https://lore.kernel.org/linux-cve-announce/2026071958-CVE-2026-63964-9e8b@gregkh/T


Note You need to log in before you can comment on or make changes to this bug.