usb: cdc-acm: Check control transfer buffer size before access
If the first fragment is shorter than struct usb_cdc_notification, we can't
calculate an expected_size. Log an error and discard the notification
instead of reading lengths from memory outside the received data, which can
lead to memory corruption when the expected_size decreases between
fragments, causing `expected_size - acm->nb_index` to wrap.
This issue has been present since the beginning of git history; however,
it only leads to memory corruption since commit ea2583529cd1
("cdc-acm: reassemble fragmented notifications").
A mitigating factor is that acm_ctrl_irq() can only execute after userspace
has opened /dev/ttyACM*; but if ModemManager is running, ModemManager will
do that automatically depending on the USB device's vendor/product IDs and
its other interfaces.
Metrics
Affected Vendors & Products
| Source | ID | Title |
|---|---|---|
Debian DLA |
DLA-4102-1 | linux-6.1 security update |
Debian DLA |
DLA-4178-1 | linux security update |
EUVD |
EUVD-2025-4440 | In the Linux kernel, the following vulnerability has been resolved: usb: cdc-acm: Check control transfer buffer size before access If the first fragment is shorter than struct usb_cdc_notification, we can't calculate an expected_size. Log an error and discard the notification instead of reading lengths from memory outside the received data, which can lead to memory corruption when the expected_size decreases between fragments, causing `expected_size - acm->nb_index` to wrap. This issue has been present since the beginning of git history; however, it only leads to memory corruption since commit ea2583529cd1 ("cdc-acm: reassemble fragmented notifications"). A mitigating factor is that acm_ctrl_irq() can only execute after userspace has opened /dev/ttyACM*; but if ModemManager is running, ModemManager will do that automatically depending on the USB device's vendor/product IDs and its other interfaces. |
Ubuntu USN |
USN-7510-1 | Linux kernel vulnerabilities |
Ubuntu USN |
USN-7510-2 | Linux kernel (FIPS) vulnerabilities |
Ubuntu USN |
USN-7510-3 | Linux kernel vulnerabilities |
Ubuntu USN |
USN-7510-4 | Linux kernel (Real-time) vulnerabilities |
Ubuntu USN |
USN-7510-5 | Linux kernel (Azure FIPS) vulnerabilities |
Ubuntu USN |
USN-7510-6 | Linux kernel (AWS FIPS) vulnerabilities |
Ubuntu USN |
USN-7510-7 | Linux kernel vulnerabilities |
Ubuntu USN |
USN-7510-8 | Linux kernel (AWS) vulnerabilities |
Ubuntu USN |
USN-7511-1 | Linux kernel (GCP) vulnerabilities |
Ubuntu USN |
USN-7511-2 | Linux kernel (GCP FIPS) vulnerabilities |
Ubuntu USN |
USN-7511-3 | Linux kernel (GKE) vulnerabilities |
Ubuntu USN |
USN-7512-1 | Linux kernel (GCP) vulnerabilities |
Ubuntu USN |
USN-7516-1 | Linux kernel vulnerabilities |
Ubuntu USN |
USN-7516-2 | Linux kernel (GCP FIPS) vulnerabilities |
Ubuntu USN |
USN-7516-3 | Linux kernel vulnerabilities |
Ubuntu USN |
USN-7516-4 | Linux kernel (Oracle) vulnerabilities |
Ubuntu USN |
USN-7516-5 | Linux kernel (HWE) vulnerabilities |
Ubuntu USN |
USN-7516-6 | Linux kernel (IBM) vulnerabilities |
Ubuntu USN |
USN-7516-7 | Linux kernel (AWS) vulnerabilities |
Ubuntu USN |
USN-7516-8 | Linux kernel (FIPS) vulnerabilities |
Ubuntu USN |
USN-7516-9 | Linux kernel (AWS) vulnerabilities |
Ubuntu USN |
USN-7517-1 | Linux kernel (Xilinx ZynqMP) vulnerabilities |
Ubuntu USN |
USN-7517-2 | Linux kernel (IBM) vulnerabilities |
Ubuntu USN |
USN-7517-3 | Linux kernel (BlueField) vulnerabilities |
Ubuntu USN |
USN-7518-1 | Linux kernel (Azure FIPS) vulnerabilities |
Ubuntu USN |
USN-7521-1 | Linux kernel vulnerabilities |
Ubuntu USN |
USN-7521-2 | Linux kernel (AWS) vulnerabilities |
Ubuntu USN |
USN-7521-3 | Linux kernel vulnerabilities |
Ubuntu USN |
USN-7539-1 | Linux kernel (Raspberry Pi) vulnerabilities |
Ubuntu USN |
USN-7540-1 | Linux kernel (Raspberry Pi) vulnerabilities |
Ubuntu USN |
USN-7593-1 | Linux kernel (HWE) vulnerabilities |
Ubuntu USN |
USN-7602-1 | Linux kernel (Xilinx ZynqMP) vulnerabilities |
Ubuntu USN |
USN-7640-1 | Linux kernel (IoT) vulnerabilities |
Ubuntu USN |
USN-7703-1 | Linux kernel vulnerabilities |
Ubuntu USN |
USN-7703-2 | Linux kernel vulnerabilities |
Ubuntu USN |
USN-7703-3 | Linux kernel (Oracle) vulnerabilities |
Ubuntu USN |
USN-7703-4 | Linux kernel vulnerabilities |
Ubuntu USN |
USN-7719-1 | Linux kernel (Raspberry Pi Real-time) vulnerabilities |
Ubuntu USN |
USN-7737-1 | Linux kernel (Azure) vulnerabilities |
Solution
No solution given by the vendor.
Workaround
No workaround given by the vendor.
Mon, 03 Nov 2025 20:30:00 +0000
| Type | Values Removed | Values Added |
|---|---|---|
| References |
|
Tue, 23 Sep 2025 19:15:00 +0000
| Type | Values Removed | Values Added |
|---|---|---|
| First Time appeared |
Linux
Linux linux Kernel |
|
| Weaknesses | CWE-787 | |
| CPEs | cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* cpe:2.3:o:linux:linux_kernel:2.6.12:-:*:*:*:*:*:* cpe:2.3:o:linux:linux_kernel:2.6.12:rc2:*:*:*:*:*:* cpe:2.3:o:linux:linux_kernel:2.6.12:rc3:*:*:*:*:*:* cpe:2.3:o:linux:linux_kernel:2.6.12:rc4:*:*:*:*:*:* cpe:2.3:o:linux:linux_kernel:2.6.12:rc5:*:*:*:*:*:* cpe:2.3:o:linux:linux_kernel:6.14:rc1:*:*:*:*:*:* cpe:2.3:o:linux:linux_kernel:6.14:rc2:*:*:*:*:*:* |
|
| Vendors & Products |
Linux
Linux linux Kernel |
|
| Metrics |
cvssV3_1
|
cvssV3_1
|
Tue, 25 Mar 2025 12:30:00 +0000
| Type | Values Removed | Values Added |
|---|---|---|
| References |
|
Thu, 13 Mar 2025 12:30:00 +0000
| Type | Values Removed | Values Added |
|---|---|---|
| References |
|
Thu, 27 Feb 2025 02:45:00 +0000
| Type | Values Removed | Values Added |
|---|---|---|
| Metrics |
threat_severity
|
threat_severity
|
Tue, 25 Feb 2025 01:45:00 +0000
| Type | Values Removed | Values Added |
|---|---|---|
| Weaknesses | CWE-130 | |
| References |
| |
| Metrics |
threat_severity
|
cvssV3_1
|
Sat, 22 Feb 2025 10:00:00 +0000
| Type | Values Removed | Values Added |
|---|---|---|
| Description | In the Linux kernel, the following vulnerability has been resolved: usb: cdc-acm: Check control transfer buffer size before access If the first fragment is shorter than struct usb_cdc_notification, we can't calculate an expected_size. Log an error and discard the notification instead of reading lengths from memory outside the received data, which can lead to memory corruption when the expected_size decreases between fragments, causing `expected_size - acm->nb_index` to wrap. This issue has been present since the beginning of git history; however, it only leads to memory corruption since commit ea2583529cd1 ("cdc-acm: reassemble fragmented notifications"). A mitigating factor is that acm_ctrl_irq() can only execute after userspace has opened /dev/ttyACM*; but if ModemManager is running, ModemManager will do that automatically depending on the USB device's vendor/product IDs and its other interfaces. | |
| Title | usb: cdc-acm: Check control transfer buffer size before access | |
| References |
|
|
Status: PUBLISHED
Assigner: Linux
Published:
Updated: 2025-11-03T19:35:54.825Z
Reserved: 2024-12-29T08:45:45.751Z
Link: CVE-2025-21704
No data.
Status : Modified
Published: 2025-02-22T10:15:11.263
Modified: 2025-11-03T20:17:10.190
Link: CVE-2025-21704
OpenCVE Enrichment
No data.
Debian DLA
EUVD
Ubuntu USN