HIGH
can Gateway CRC8 OOB
CVE-2026-31570
CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
KernelScan AI8.8HIGH
01Description
In the Linux kernel, the following vulnerability has been resolved: can: gw: fix OOB heap access in cgw_csum_crc8_rel() cgw_csum_crc8_rel() correctly computes bounds-safe indices via calc_idx(): int from = calc_idx(crc8->from_idx, cf->len); int to = calc_idx(crc8->to_idx, cf->len); int res = calc_idx(crc8->result_idx, cf->len); if (from < 0 || to < 0 || res < 0) return; However, the loop and the result write then use the raw s8 fields directly instead of the computed variables: for (i = crc8->from_idx; ...) /* BUG: raw negative index */ cf->data[crc8->result_idx] = ...; /* BUG: raw negative index */ With from_idx = to_idx = result_idx = -64 on a 64-byte CAN FD frame, calc_idx(-64, 64) = 0 so the guard passes, but the loop iterates with i = -64, reading cf->data[-64], and the write goes to cf->data[-64]. This write might end up to 56 (7.0-rc) or 40 (<= 6.19) bytes before the start of the canfd_frame on the heap. The companion function cgw_csum_xor_rel() uses `from`/`to`/`res` correctly throughout; fix cgw_csum_crc8_rel() to match. Confirmed with KASAN on linux-7.0-rc2: BUG: KASAN: slab-out-of-bounds in cgw_csum_crc8_rel+0x515/0x5b0 Read of size 1 at addr ffff8880076619c8 by task poc_cgw_oob/62 To configure the can-gw crc8 checksums CAP_NET_ADMIN is needed.
02KernelScan AI Analysis
Risk summary
An attacker with administrative network privileges can trigger out-of-bounds heap access in the CAN gateway subsystem by configuring malicious CRC8 checksum parameters. This could lead to kernel memory corruption, potentially enabling privilege escalation or denial of service attacks on systems using CAN networks.
Vulnerability analysis
Root Cause: The cgw_csum_crc8_rel() function correctly computes bounds-safe indices using calc_idx() and validates them, but then uses the raw signed 8-bit fields (crc8->from_idx, crc8->to_idx, crc8->result_idx) directly in the loop and result write operations instead of the computed safe variables. When negative indices like -64 are provided, calc_idx(-64, 64) returns 0 (passing validation), but the loop still uses the raw -64 value, causing out-of-bounds heap access.
Attack Surface: Local attack requiring CAP_NET_ADMIN capability to configure CAN gateway CRC8 checksums. The vulnerability affects CAN FD frame processing in the kernel's CAN gateway subsystem, allowing heap corruption up to 56 bytes before the canfd_frame structure.
Fix Mechanism: The patch replaces the raw field usage with the computed safe variables: changes 'crc8->from_idx' to 'from', 'crc8->to_idx' to 'to', and 'crc8->result_idx' to 'res' in both the loop iterations and the final result write operation. This ensures the validated, bounds-safe indices are used throughout the function.
03Fix Versions
| Branch | Fixed in | Patch commit |
|---|---|---|
| 5.10 | 5.10.253 | e7c99348b061 |
| 5.15 | 5.15.203 | 999ca48d55a8 |
| 6.1 | 6.1.168 | a025283d7f74 |
| 6.12 | 6.12.80 | c4e8eaa75fa0 |
| 6.18 | 6.18.21 | 84f8b76d2427 |
| 6.19 | 6.19.11 | 66b689efd082 |
| 6.6 | 6.6.131 | 54ecdf76a55e |
| mainline | 7.0 | b9c310d72783 |