Skip to main content

Linux Kernel CVE-2025-39987

HIGH
2025-10-15 416baaa9-dc9f-4396-8d5f-8c081fb06d67
7.8
CVSS 3.1 · Vendor: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
Share

Severity by source

Vendor (416baaa9-dc9f-4396-8d5f-8c081fb06d67) PRIMARY
7.8 HIGH
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
vuln.today AI
7.8 HIGH

Local trigger requires CAP_NET_ADMIN to change MTU so PR:L and AV:L; a controllable kernel heap overflow yields high confidentiality, integrity, and availability impact.

3.1 AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
4.0 AV:L/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
SUSE
5.5 MEDIUM
AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H

Primary rating from Vendor (416baaa9-dc9f-4396-8d5f-8c081fb06d67).

CVSS VectorVendor: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

Attack Vector
Local
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

2
Analysis Generated
Jul 30, 2026 - 08:04 vuln.today
CVE Published
Oct 15, 2025 - 08:15 cve.org
HIGH 7.8

DescriptionCVE.org

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

can: hi311x: populate ndo_change_mtu() to prevent buffer overflow

Sending an PF_PACKET allows to bypass the CAN framework logic and to directly reach the xmit() function of a CAN driver. The only check which is performed by the PF_PACKET framework is to make sure that skb->len fits the interface's MTU.

Unfortunately, because the sun4i_can driver does not populate its net_device_ops->ndo_change_mtu(), it is possible for an attacker to configure an invalid MTU by doing, for example:

$ ip link set can0 mtu 9999

After doing so, the attacker could open a PF_PACKET socket using the ETH_P_CANXL protocol:

socket(PF_PACKET, SOCK_RAW, htons(ETH_P_CANXL))

to inject a malicious CAN XL frames. For example:

struct canxl_frame frame = { .flags = 0xff, .len = 2048, };

The CAN drivers' xmit() function are calling can_dev_dropped_skb() to check that the skb is valid, unfortunately under above conditions, the malicious packet is able to go through can_dev_dropped_skb() checks:

  1. the skb->protocol is set to ETH_P_CANXL which is valid (the

function does not check the actual device capabilities).

  1. the length is a valid CAN XL length.

And so, hi3110_hard_start_xmit() receives a CAN XL frame which it is not able to correctly handle and will thus misinterpret it as a CAN frame. The driver will consume frame->len as-is with no further checks.

This can result in a buffer overflow later on in hi3110_hw_tx() on this line:

memcpy(buf + HI3110_FIFO_EXT_DATA_OFF, frame->data, frame->len);

Here, frame->len corresponds to the flags field of the CAN XL frame. In our previous example, we set canxl_frame->flags to 0xff. Because the maximum expected length is 8, a buffer overflow of 247 bytes occurs!

Populate net_device_ops->ndo_change_mtu() to ensure that the interface's MTU can not be set to anything bigger than CAN_MTU. By fixing the root cause, this prevents the buffer overflow.

AnalysisAI

Local privilege-to-kernel buffer overflow in the Linux kernel's hi311x (Holt HI-3110) CAN controller driver allows a user with network configuration capability to trigger an out-of-bounds heap write by injecting an oversized CAN XL frame. Because the driver never implemented ndo_change_mtu(), an attacker can raise the interface MTU beyond CAN_MTU and push a crafted frame through PF_PACKET whose length field (up to 0xff) is copied verbatim in hi3110_hw_tx(), overflowing an 8-byte buffer by up to 247 bytes. There is no public exploit identified at time of analysis, and the EPSS score is low (0.22%, 13th percentile); the issue has been resolved upstream in the mainline and stable kernel trees.

Technical ContextAI

The affected component is the SPI-attached Holt HI-3110 CAN controller driver (drivers/net/can/spi/hi311x.c) within the Linux kernel's SocketCAN networking subsystem. The root cause is a missing net_device_ops->ndo_change_mtu() handler: without it, the generic netlink path allows the interface MTU to be set to arbitrary values (e.g., 9999) instead of being bounded to CAN_MTU (16 bytes for classic CAN). A PF_PACKET SOCK_RAW socket bound with ETH_P_CANXL bypasses the higher-level CAN framework and reaches the driver's xmit() directly; the sanity gate can_dev_dropped_skb() only validates skb->protocol and a plausible CAN XL length, not the device's actual capabilities. The driver then treats the CAN XL frame's flags field as a classic-CAN data length and performs memcpy(buf + HI3110_FIFO_EXT_DATA_OFF, frame->data, frame->len) with an attacker-controlled length, producing a heap buffer overflow. This is a classic CWE-787 out-of-bounds write / CWE-120 buffer copy without size check; the input lists CWE as N/A, so the class is inferred from the description rather than an assigned CWE.

Affected ProductsAI

The vulnerability affects the Linux kernel's hi311x CAN driver (Holt HI-3110 SPI CAN controller) across multiple maintained kernel branches prior to the fix; exact version boundaries are not provided as CPE data in the input, and affected ranges must be derived from the stable-tree backport commits. Fixes are distributed as git.kernel.org stable commits (e.g., 57d332ce8c92, 7ab85762274c, 8f351db6b236, ac1c7656fa71, be1b25005fd0, def814b4ba31, e77fdf9e33a8, f2c247e95810), indicating the patch was applied to mainline and backported to several stable series. Any distribution kernel that ships the hi311x driver and predates these commits should be considered affected until the vendor confirms a patched build.

RemediationAI

Upstream fix available (multiple stable-tree commits); a released patched version is not independently confirmed from the input, so update to a distribution kernel that incorporates the referenced commits (e.g., git.kernel.org/stable/c/f2c247e9581024d8b3dd44cbe086bf2bebbef42c and its sibling backports) as soon as your vendor publishes them. The fix populates ndo_change_mtu() to cap the interface MTU at CAN_MTU, eliminating the root cause. Where kernel patching must be deferred, compensating controls include: restricting CAP_NET_ADMIN so untrusted users and unprivileged network namespaces cannot alter CAN interface MTU (trade-off: may break legitimate CAN management tooling), and removing/blacklisting the hi311x module on systems that do not use Holt HI-3110 hardware via modprobe blacklist (trade-off: disables CAN connectivity for that controller). Because the overflow is reached through PF_PACKET, denying CAP_NET_RAW to untrusted principals further raises the bar (trade-off: affects raw-socket-dependent applications).

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
Container suse/hpc/warewulf4-x86_64/sle-hpc-node:15.6.17.8.134 Image SLES15-SP6 Image SLES15-SP6-BYOS Image SLES15-SP6-BYOS-Azure Image SLES15-SP6-BYOS-EC2 Image SLES15-SP6-BYOS-GCE Image SLES15-SP6-CHOST-BYOS Image SLES15-SP6-CHOST-BYOS-Aliyun Image SLES15-SP6-CHOST-BYOS-Azure Image SLES15-SP6-CHOST-BYOS-EC2 Image SLES15-SP6-CHOST-BYOS-GCE Image SLES15-SP6-CHOST-BYOS-GDC Image SLES15-SP6-CHOST-BYOS-SAP-CCloud Image SLES15-SP6-EC2 Image SLES15-SP6-EC2-ECS-HVM Image SLES15-SP6-GCE Image SLES15-SP6-HPC-BYOS Image SLES15-SP6-HPC-BYOS-Azure Image SLES15-SP6-HPC-BYOS-EC2 Image SLES15-SP6-HPC-BYOS-GCE Image SLES15-SP6-HPC-EC2 Image SLES15-SP6-HPC-GCE Image SLES15-SP6-Hardened-BYOS Image SLES15-SP6-Hardened-BYOS-Azure Image SLES15-SP6-Hardened-BYOS-EC2 Image SLES15-SP6-Hardened-BYOS-GCE Image SLES15-SP6-SAP Image SLES15-SP6-SAP-Azure Image SLES15-SP6-SAP-EC2 Image SLES15-SP6-SAP-GCE Image SLES15-SP6-SAPCAL Image SLES15-SP6-SAPCAL-Azure Image SLES15-SP6-SAPCAL-EC2 Image SLES15-SP6-SAPCAL-GCE Affected
Container suse/sl-micro/6.0/baremetal-os-container:latest Container suse/sl-micro/6.0/toolbox:latest Affected
Container suse/sl-micro/6.0/base-os-container:2.1.3-7.65 Image SLE-Micro Image SLE-Micro-Azure Image SLE-Micro-BYOS Image SLE-Micro-BYOS-Azure Image SLE-Micro-BYOS-EC2 Image SLE-Micro-BYOS-GCE Image SLE-Micro-EC2 Image SLE-Micro-GCE Affected
Container suse/sl-micro/6.0/kvm-os-container:2.1.3-6.88 Affected
Container suse/sl-micro/6.0/rt-os-container:2.1.3-7.105 Affected

Share

CVE-2025-39987 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy