CVE-2026-63960

Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
19/07/2026
Last modified:
20/07/2026

Description

In the Linux kernel, the following vulnerability has been resolved:<br /> <br /> usb: typec: wcove: don&amp;#39;t write past struct pd_message in wcove_read_rx_buffer()<br /> <br /> wcove_read_rx_buffer() copies the PD RX FIFO into the caller&amp;#39;s<br /> struct pd_message with<br /> <br /> for (i = 0; i regmap, USBC_RX_DATA + i, msg + i);<br /> <br /> which has two problems:<br /> <br /> USBC_RXINFO_RXBYTES() is a 5-bit field (max 31) while struct pd_message<br /> is 30 bytes (__le16 header + __le32 payload[PD_MAX_PAYLOAD], packed).<br /> The byte count latched in RXINFO is the number of bytes the port partner<br /> put on the wire, so a malicious partner that transmits a 31-byte frame<br /> can drive the loop one byte past the destination if the WCOVE BMC<br /> receiver does not enforce the PD object-count limit in hardware. The<br /> existing FIXME flagged this as unverified.<br /> <br /> Independently, regmap_read() takes an unsigned int * and stores a full<br /> unsigned int at the destination. Passing the byte pointer msg + i means<br /> each iteration writes four bytes; the high three are zero (val_bits is<br /> 8) and are normally overwritten by the next iteration, but the final<br /> iteration&amp;#39;s high bytes are not. With RXBYTES == 30 the i == 29 iteration<br /> already writes three zero bytes past msg, which sits on the IRQ thread&amp;#39;s<br /> stack in wcove_typec_irq().<br /> <br /> Clamp the loop to sizeof(struct pd_message) and read each register into<br /> a local before storing only its low byte, so the copy can never exceed<br /> the destination regardless of what RXINFO reports.

Impact