CVE-2026-31721
usb: gadget: f_hid: move list and spinlock inits from bind to alloc
Severity Score
Exploit Likelihood
Affected Versions
Public Exploits
0Exploited in Wild
-Decision
Descriptions
In the Linux kernel, the following vulnerability has been resolved: usb: gadget: f_hid: move list and spinlock inits from bind to alloc There was an issue when you did the following:
- setup and bind an hid gadget
- open /dev/hidg0
- use the resulting fd in EPOLL_CTL_ADD
- unbind the UDC
- bind the UDC
- use the fd in EPOLL_CTL_DEL When CONFIG_DEBUG_LIST was enabled, a list_del corruption was reported
within remove_wait_queue (via ep_remove_wait_queue). After some
debugging I found out that the queues, which f_hid registers via
poll_wait were the problem. These were initialized using
init_waitqueue_head inside hidg_bind. So effectively, the bind function
re-initialized the queues while there were still items in them. The solution is to move the initialization from hidg_bind to hidg_alloc
to extend their lifetimes to the lifetime of the function instance. Additionally, I found many other possibly problematic init calls in the
bind function, which I moved as well.
CVSS Scores
SSVC
- Decision:-
Timeline
- 2026-03-09 CVE Reserved
- 2026-05-01 CVE Published
- 2026-05-07 EPSS Updated
- 2026-05-11 CVE Updated
- ---------- Exploited in Wild
- ---------- KEV Due Date
- ---------- First Exploit
CWE
CAPEC
References (9)
| URL | Tag | Source |
|---|---|---|
| https://git.kernel.org/stable/c/cb382536052fcc7713988869b54a81137069e5a9 | Vuln. Introduced |
| URL | Date | SRC |
|---|
| URL | Date | SRC |
|---|
Affected Vendors, Products, and Versions
| Vendor | Product | Version | Other | Status | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Vendor | Product | Version | Other | Status | <-- --> | Vendor | Product | Version | Other | Status |
| Linux Search vendor "Linux" | Linux Kernel Search vendor "Linux" for product "Linux Kernel" | >= 3.19 < 5.10.253 Search vendor "Linux" for product "Linux Kernel" and version " >= 3.19 < 5.10.253" | en |
Affected
| ||||||
| Linux Search vendor "Linux" | Linux Kernel Search vendor "Linux" for product "Linux Kernel" | >= 3.19 < 5.15.203 Search vendor "Linux" for product "Linux Kernel" and version " >= 3.19 < 5.15.203" | en |
Affected
| ||||||
| Linux Search vendor "Linux" | Linux Kernel Search vendor "Linux" for product "Linux Kernel" | >= 3.19 < 6.1.169 Search vendor "Linux" for product "Linux Kernel" and version " >= 3.19 < 6.1.169" | en |
Affected
| ||||||
| Linux Search vendor "Linux" | Linux Kernel Search vendor "Linux" for product "Linux Kernel" | >= 3.19 < 6.6.135 Search vendor "Linux" for product "Linux Kernel" and version " >= 3.19 < 6.6.135" | en |
Affected
| ||||||
| Linux Search vendor "Linux" | Linux Kernel Search vendor "Linux" for product "Linux Kernel" | >= 3.19 < 6.12.81 Search vendor "Linux" for product "Linux Kernel" and version " >= 3.19 < 6.12.81" | en |
Affected
| ||||||
| Linux Search vendor "Linux" | Linux Kernel Search vendor "Linux" for product "Linux Kernel" | >= 3.19 < 6.18.22 Search vendor "Linux" for product "Linux Kernel" and version " >= 3.19 < 6.18.22" | en |
Affected
| ||||||
| Linux Search vendor "Linux" | Linux Kernel Search vendor "Linux" for product "Linux Kernel" | >= 3.19 < 6.19.12 Search vendor "Linux" for product "Linux Kernel" and version " >= 3.19 < 6.19.12" | en |
Affected
| ||||||
| Linux Search vendor "Linux" | Linux Kernel Search vendor "Linux" for product "Linux Kernel" | >= 3.19 < 7.0 Search vendor "Linux" for product "Linux Kernel" and version " >= 3.19 < 7.0" | en |
Affected
| ||||||
