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

can: bcm: fix CAN frame rx/tx statistics

KCSAN detected a data race within the bcm_rx_handler() when two CAN frames
have been simultaneously received and processed in a single rx op by two
different CPUs.

Use atomic operations with (signed) long data types to access the
statistics in the hot path to fix the KCSAN complaint.

Additionally simplify the update and check of statistics overflow by
using the atomic operations in separate bcm_update_[rx|tx]_stats()
functions. The rx variant runs under bcm_rx_update_lock to prevent
races when resetting the two rx counters; the tx variant runs under
bcm_tx_lock and only needs to guard its own counter's overflow.

As the rx path resets its values already at LONG_MAX / 100, there is
no conflict between the two locking domains (bcm_rx_update_lock vs.
bcm_tx_lock) even for ops that use both paths.

The rx statistics update and the frames_filtered update in
bcm_rx_changed() were previously performed in two separate
bcm_rx_update_lock sections. For an rx op subscribed on all interfaces
(ifindex == 0), bcm_rx_handler() can run concurrently on different
CPUs, so a counter reset by one CPU between these two sections could
leave frames_filtered larger than frames_abs on another CPU, producing
a bogus (even negative) reduction percentage in procfs. Update the
statistics in the same critical section as bcm_rx_changed() to close
this gap, which also removes the now unneeded extra lock/unlock pair
around the traffic_flags calculation.
Published: 2026-08-15
Score: n/a
EPSS: n/a
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

This vulnerability is a data race in the Linux kernel's bcm CAN driver. When two CPUs simultaneously process CAN frames in a single receive operation, the bcm_rx_handler() updates shared statistics without proper synchronization. The result is an inconsistent state that can make frames_filtered larger than frames_abs, producing a negative or otherwise bogus reduction percentage in the procfs interface. The flaw does not provide a direct pathway for an attacker to read or modify privileged data, but it can impact the reliability of monitoring tools that rely on accurate CAN statistics.

Affected Systems

All Linux kernel versions built with the bcm CAN driver that contain the unpatched bcm_rx_handler() function. The issue applies to any deployment of the supported Linux kernel at the time of the patch, regardless of distribution.

Risk and Exploitability

No CVSS score is listed in the advisory, and the EPSS score is unavailable, indicating limited publicly known exploitation attempts. The bug is not present in CISA's KEV catalog. The attack vector requires concurrent traffic on a CAN bus and operations on at least two CPUs; typical environments will not exploit this condition for malicious gain, though the unstable statistics may be problematic for system diagnostics. Overall, the risk is considered low, but the lack of accurate metrics could impair operations that depend on precise traffic metrics.

Generated by OpenCVE AI on August 15, 2026 at 08:55 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Apply a kernel update that includes the BCM driver fix (commit 8104bcdb2612fdda95169ddc3b49747b2ff98d24 and subsequent related changes).
  • Reboot the system to load the updated kernel and ensure the new BCM driver versions are in use.
  • Verify that the statistics counters no longer produce negative or inconsistent values by inspecting the /proc entries for the CAN interface.

Generated by OpenCVE AI on August 15, 2026 at 08:55 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Sat, 15 Aug 2026 09:15:00 +0000

Type Values Removed Values Added
Weaknesses CWE-362

Sat, 15 Aug 2026 06:00:00 +0000

Type Values Removed Values Added
Description In the Linux kernel, the following vulnerability has been resolved: can: bcm: fix CAN frame rx/tx statistics KCSAN detected a data race within the bcm_rx_handler() when two CAN frames have been simultaneously received and processed in a single rx op by two different CPUs. Use atomic operations with (signed) long data types to access the statistics in the hot path to fix the KCSAN complaint. Additionally simplify the update and check of statistics overflow by using the atomic operations in separate bcm_update_[rx|tx]_stats() functions. The rx variant runs under bcm_rx_update_lock to prevent races when resetting the two rx counters; the tx variant runs under bcm_tx_lock and only needs to guard its own counter's overflow. As the rx path resets its values already at LONG_MAX / 100, there is no conflict between the two locking domains (bcm_rx_update_lock vs. bcm_tx_lock) even for ops that use both paths. The rx statistics update and the frames_filtered update in bcm_rx_changed() were previously performed in two separate bcm_rx_update_lock sections. For an rx op subscribed on all interfaces (ifindex == 0), bcm_rx_handler() can run concurrently on different CPUs, so a counter reset by one CPU between these two sections could leave frames_filtered larger than frames_abs on another CPU, producing a bogus (even negative) reduction percentage in procfs. Update the statistics in the same critical section as bcm_rx_changed() to close this gap, which also removes the now unneeded extra lock/unlock pair around the traffic_flags calculation.
Title can: bcm: fix CAN frame rx/tx statistics
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-08-15T05:52:57.734Z

Reserved: 2026-08-09T03:40:39.906Z

Link: CVE-2026-72118

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-08-15T06:21:26.240

Modified: 2026-08-15T06:21:26.240

Link: CVE-2026-72118

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-15T09:00:06Z

Weaknesses
  • CWE-362

    Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition')