Linux: Use After Free
CVE-2025-38350 is a high-severity use after free vulnerability in Linux, with a CVSS 3.1 base score of 7.8 out of 10. It can be exploited with local access to the system by an attacker with a low-privileged account, without any action from a user. The record lists versions 3b290923ad2b23596208c1e29520badef4356a43, e9921b57dca05ac5f4fa1fa8e993d4f0ee52e2b7, e269f29e9395527bc00c213c6b15da04ebb35070 as the first without the flaw, so updating Linux to one of those releases or later removes the exposure. There is no confirmed exploitation so far. EPSS estimates a 0.3% chance of exploitation within 30 days, which is low compared with other CVEs.
High severity with no evidence of exploitation so far.
What to do
- Update Linux to 3b290923ad2b23596208c1e29520badef4356a43 or e9921b57dca05ac5f4fa1fa8e993d4f0ee52e2b7 or e269f29e9395527bc00c213c6b15da04ebb35070 or 7874c9c132e906a52a187d045995b115973c93fb, whichever matches your release line, or a later version.
- Update RUGGEDCOM RST2428P to V3.3 or a later version.
- Update SCALANCE XC-300/XR-300/XC-400/XR-500WG/XR-500 family to V3.3 or a later version.
Affected products and versions
| Vendor | Product | Affected versions | Fixed in |
|---|---|---|---|
| Linux | Linux | 1034e3310752e8675e313f7271b348914008719a up to, but not including, 3b290923ad2b23596208c1e29520badef4356a43; f9f593e34d2fb67644372c8f7b033bdc622ad228 up to, but not including, e9921b57dca05ac5f4fa1fa8e993d4f0ee52e2b7; 89c301e929a0db14ebd94b4d97764ce1d6981653 up to, but not including, e269f29e9395527bc00c213c6b15da04ebb35070; f1dde3eb17dc1b8bd07aed00004b1e05fc87a3d4 up to, but not including, 7874c9c132e906a52a187d045995b115973c93fb; 93c276942e75de0e5bc91576300d292e968f5a02 up to, but not including, f680a4643c6f71e758d8fe0431a958e9a6a4f59d; 49b21795b8e5654a7df3d910a12e1060da4c04cf up to, but not including, a553afd91f55ff39b1e8a1c4989a29394c9e0472; 3f981138109f63232a5fb7165938d4c945cc1b9d up to, but not including, a44acdd9e84a211989ff4b9b92bf3545d8456ad5; 3f981138109f63232a5fb7165938d4c945cc1b9d up to, but not including, 103406b38c600fec1fe375a77b27d87e314aea09; and 9 more ranges | 3b290923ad2b23596208c1e29520badef4356a43, e9921b57dca05ac5f4fa1fa8e993d4f0ee52e2b7, e269f29e9395527bc00c213c6b15da04ebb35070, 7874c9c132e906a52a187d045995b115973c93fb, f680a4643c6f71e758d8fe0431a958e9a6a4f59d, a553afd91f55ff39b1e8a1c4989a29394c9e0472 |
| Siemens | RUGGEDCOM RST2428P | before V3.3 | V3.3 |
| Siemens | SCALANCE XC-300/XR-300/XC-400/XR-500WG/XR-500 family | before V3.3 | V3.3 |
| Siemens | SCALANCE XCH328 | before V3.3 | V3.3 |
| Siemens | SCALANCE XCM324 | before V3.3 | V3.3 |
| Siemens | SCALANCE XCM328 | before V3.3 | V3.3 |
| Siemens | SCALANCE XCM332 | before V3.3 | V3.3 |
| Siemens | SCALANCE XRH334 (24 V DC, 8xFO, CC) | before V3.3 | V3.3 |
| Siemens | SCALANCE XRM334 (230 V AC, 12xFO) | before V3.3 | V3.3 |
| Siemens | SCALANCE XRM334 (230 V AC, 8xFO) | before V3.3 | V3.3 |
| Siemens | SCALANCE XRM334 (230V AC, 2x10G, 24xSFP, 8xSFP+) | before V3.3 | V3.3 |
| Siemens | SCALANCE XRM334 (24 V DC, 12xFO) | before V3.3 | V3.3 |
| Siemens | SCALANCE XRM334 (24 V DC, 8xFO) | before V3.3 | V3.3 |
| Siemens | SCALANCE XRM334 (24V DC, 2x10G, 24xSFP, 8xSFP+) | before V3.3 | V3.3 |
| Siemens | SCALANCE XRM334 (2x230 V AC, 12xFO) | before V3.3 | V3.3 |
| Siemens | SCALANCE XRM334 (2x230 V AC, 8xFO) | before V3.3 | V3.3 |
| Siemens | SCALANCE XRM334 (2x230V AC, 2x10G, 24xSFP, 8xSFP+) | before V3.3 | V3.3 |
| Siemens | SIMATIC S7-1500 CPU 1518-4 PN/DP MFP | V3.1.5 and later | Not stated |
| Siemens | SIMATIC S7-1500 CPU 1518F-4 PN/DP MFP | V3.1.5 and later | Not stated |
| Siemens | SIPLUS S7-1500 CPU 1518-4 PN/DP MFP | V3.1.5 and later | Not stated |
| Linux | Linux Kernel | 5.4.294 up to, but not including, 5.4.296; 5.10.238 up to, but not including, 5.10.240; 5.15.185 up to, but not including, 5.15.187; 6.1.141 up to, but not including, 6.1.144; 6.6.93 up to, but not including, 6.6.97; 6.12.31 up to, but not including, 6.12.37; 6.14.9 up to, but not including, 6.15; 6.15.1 up to, but not including, 6.15.6; and 2 more ranges | 5.4.296, 5.10.240, 5.15.187, 6.1.144, 6.6.97, 6.12.37 |
| Debian | Debian Linux | 11.0 | Not stated |
Version data comes from the organisation that assigned the CVE. Confirm against the vendor advisory before deciding you are unaffected.
How the severity score breaks down
- Attack vector
- LocalThe attacker needs local access or must trick a user into running something.
- Attack complexity
- LowNo special conditions are needed; the attack works reliably.
- Privileges required
- LowA basic user account is enough.
- User interaction
- NoneNo action by a victim is required.
- Scope
- UnchangedImpact stays within the vulnerable component.
- Confidentiality
- HighAll data handled by the component can be read.
- Integrity
- HighData or code can be modified at will.
- Availability
- HighThe component can be taken down completely.
Vector: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H. Scored by NVD.
| Scoring system | Score | Severity | Scored by |
|---|---|---|---|
| CVSS 3.1 | 7.8 | High | CNA |
| CVSS 3.1 | 7.8 | High | NVD |
Official description
In the Linux kernel, the following vulnerability has been resolved: net/sched: Always pass notifications when child class becomes empty Certain classful qdiscs may invoke their classes' dequeue handler on an enqueue operation. This may unexpectedly empty the child qdisc and thus make an in-flight class passive via qlen_notify(). Most qdiscs do not expect such behaviour at this point in time and may re-activate the class eventually anyways which will lead to a use-after-free. The referenced fix commit attempted to fix this behavior for the HFSC case by moving the backlog accounting around, though this turned out to be incomplete since the parent's parent may run into the issue too. The following reproducer demonstrates this use-after-free: tc qdisc add dev lo root handle 1: drr tc filter add dev lo parent 1: basic classid 1:1 tc class add dev lo parent 1: classid 1:1 drr tc qdisc add dev lo parent 1:1 handle 2: hfsc def 1 tc class add dev lo parent 2: classid 2:1 hfsc rt m1 8 d 1 m2 0 tc qdisc add dev lo parent 2:1 handle 3: netem tc qdisc add dev lo parent 3:1 handle 4: blackhole echo 1 | socat -u STDIN UDP4-DATAGRAM:127.0.0.1:8888 tc class delete dev lo classid 1:1 echo 1 | socat -u STDIN UDP4-DATAGRAM:127.0.0.1:8888 Since backlog accounting issues leading to a use-after-frees on stale class pointers is a recurring pattern at this point, this patch takes a different approach. Instead of trying to fix the accounting, the patch ensures that qdisc_tree_reduce_backlog always calls qlen_notify when the child qdisc is empty. This solves the problem because deletion of qdiscs always involves a call to qdisc_reset() and / or qdisc_purge_queue() which ultimately resets its qlen to 0 thus causing the following qdisc_tree_reduce_backlog() to report to the parent. Note that this may call qlen_notify on passive classes multiple times. This is not a problem after the recent patch series that made all the classful qdiscs qlen_notify() handlers idempotent.
Source: the CVE record as published by its numbering authority, via NVD and CVE.org.
The underlying weakness: Use After Free
The product reuses or references memory after it has been freed. At some point afterward, the memory may be allocated again and saved in another pointer, while the original pointer references a location somewhere within the new allocation. Any operations using the original pointer are no longer valid because the memory belongs to the code that operates on the new pointer.
How developers prevent this class of flaw
- Choose a language that provides automatic memory management.
- When freeing pointers, be sure to set them to NULL once they are freed. However, the utilization of multiple or complex data structures may lower the usefulness of this strategy.
Timeline
- CVE record published.
- CISA published its SSVC assessment (exploitation: none, automatable: no, technical impact: total).
- Record last changed materially (score, affected products, status or references).
References
Patches and release notes
- git.kernel.org/stable/c/103406b38c600fec1fe375a77b27d87e314aea09
- git.kernel.org/stable/c/3b290923ad2b23596208c1e29520badef4356a43
- git.kernel.org/stable/c/7874c9c132e906a52a187d045995b115973c93fb
- git.kernel.org/stable/c/a44acdd9e84a211989ff4b9b92bf3545d8456ad5
- git.kernel.org/stable/c/a553afd91f55ff39b1e8a1c4989a29394c9e0472
- git.kernel.org/stable/c/e269f29e9395527bc00c213c6b15da04ebb35070
- git.kernel.org/stable/c/e9921b57dca05ac5f4fa1fa8e993d4f0ee52e2b7
- git.kernel.org/stable/c/f680a4643c6f71e758d8fe0431a958e9a6a4f59d
Third-party and government advisories
- lists.debian.org/debian-lts-announce/2025/10/msg00007.htmlThird Party Advisory
- lists.debian.org/debian-lts-announce/2025/10/msg00008.htmlThird Party Advisory
Other references
Recent Use After Free vulnerabilities
- 7.8 High severity
- 8.8 High severity
- 7.8 High severity
- 7.8 High severity
- 7.8 High severity
- 7.8 High severity
Spotted an error? Tell us.