CVE-2026-31728 Details
Description
In the Linux kernel, the following vulnerability has been resolved: usb: gadget: u_ether: Fix race between gether_disconnect and eth_stop A race condition between gether_disconnect() and eth_stop() leads to a NULL pointer dereference. Specifically, if eth_stop() is triggered concurrently while gether_disconnect() is tearing down the endpoints, eth_stop() attempts to access the cleared endpoint descriptor, causing the following NPE: Unable to handle kernel NULL pointer dereference Call trace: __dwc3_gadget_ep_enable+0x60/0x788 dwc3_gadget_ep_enable+0x70/0xe4 usb_ep_enable+0x60/0x15c eth_stop+0xb8/0x108 Because eth_stop() crashes while holding the dev->lock, the thread running gether_disconnect() fails to acquire the same lock and spins forever, resulting in a hardlockup: Core - Debugging Information for Hardlockup core(7) Call trace: queued_spin_lock_slowpath+0x94/0x488 _raw_spin_lock+0x64/0x6c gether_disconnect+0x19c/0x1e8 ncm_set_alt+0x68/0x1a0 composite_setup+0x6a0/0xc50 The root cause is that the clearing of dev->port_usb in gether_disconnect() is delayed until the end of the function. Move the clearing of dev->port_usb to the very beginning of gether_disconnect() while holding dev->lock. This cuts off the link immediately, ensuring eth_stop() will see dev->port_usb as NULL and safely bail out.
A race condition has been identified in the Linux kernel's USB gadget Ethernet function, specifically within the u_ether component. This vulnerability, present in the stable group of the Linux kernel, arises from a concurrency issue between the functions gether_disconnect() and eth_stop(). When eth_stop() is called while gether_disconnect() is in the process of dismantling endpoint connections, it can lead to a NULL pointer dereference. The eth_stop() function tries to access an endpoint descriptor that has already been cleared, causing a kernel panic due to the NULL pointer dereference. This issue is exacerbated by the fact that eth_stop() holds a lock on the device, preventing gether_disconnect() from acquiring the same lock, which can result in a system hang.
The vulnerability has been addressed by modifying the gether_disconnect() function to clear the dev->port_usb variable at the beginning of the disconnection process, while holding the appropriate lock. This change ensures that the eth_stop() function will see the port variable as NULL and can safely exit, preventing the NULL pointer dereference.
Metrics
CVSS 4.0 Severity and Vector Strings:
No CVSS 4.0 data is available for this CVE.
CVSS 3.x Severity and Vector Strings:
No data available for CVSS Version 2.0 on this CVE.
No SSVC data is available for this CVE.
References to Advisories, Solutions, and Tools
By selecting these links, you will be leaving this site. These are references gathered from the official CVE record and are not endorsed by Volerion.
| URL | Source(s) | Tag(s) |
|---|---|---|
| https://git.kernel.org/stable/c/6ad77458637b78ec655e3da5f112c862e6690a9d | kernel.org | Patch |
| https://git.kernel.org/stable/c/8ff689edfeceb5e3ec1623e09af2b2aa0f1098a8 | kernel.org | Patch |
| https://git.kernel.org/stable/c/a259ba0bce3b192c04334499690372a250f7d0b1 | kernel.org | Patch |
| https://git.kernel.org/stable/c/bbb09bb89ffa571475f66daca9482b974cd29d6a | kernel.org | Patch |
| https://git.kernel.org/stable/c/e1e7a66584bf0aff3becb73c19fa31527889fc9e | kernel.org | Patch |
| https://git.kernel.org/stable/c/e1eabb072c75681f78312c484ccfffb7430f206e | kernel.org | Patch |
| https://git.kernel.org/stable/c/f02980594deef751e42133714aee25228f1494c6 | kernel.org | Patch |
| https://git.kernel.org/stable/c/f6813c2b2ae78def76b69e0f9d72f80e4a1c4aca | kernel.org | Patch |
Weakness Enumeration
| CWE-ID | CWE Name | Source |
|---|---|---|
| CWE-362 | Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition') | [email protected] |
Affected Products
| Product | Versions |
|---|---|
| linux linux kernel | >= 2.6.27, < 5.10.253 >= 5.11, < 5.15.203 >= 5.16, < 6.1.169 >= 6.2, < 6.6.134 >= 6.7, < 6.12.81 >= 6.13, < 6.18.22 >= 6.19, < 6.19.12 7.0 rc1 7.0 rc2 7.0 rc3 7.0 rc4 7.0 rc5 7.0 rc6 |
CPE
Remediation
| |
Change History
3 change records found show changes
| Date | Action | Recorded By |
|---|---|---|
| Jun 17, 2026 | CVE Modified | kernel.org |
| May 7, 2026 | Initial Analysis | [email protected] |
| May 1, 2026 | New CVE Received | kernel.org |