CVE-2026-22986: gpiolib: fix race condition for gdev->srcu
In the Linux kernel, the following vulnerability has been resolved:
gpiolib: fix race condition for gdev->srcu
If two drivers were calling gpiochip_add_data_with_key(), one may be
traversing the srcu-protected list in gpio_name_to_desc(), meanwhile
other has just added its gdev in gpiodev_add_to_list_unlocked().
This creates a non-mutexed and non-protected timeframe, when one
instance is dereferencing and using &gdev->srcu, before the other
has initialized it, resulting in crash:
[ 4.935481] Unable to handle kernel paging request at virtual address ffff800272bcc000
[ 4.943396] Mem abort info:
[ 4.943400] ESR = 0x0000000096000005
[ 4.943403] EC = 0x25: DABT (current EL), IL = 32 bits
[ 4.943407] SET = 0, FnV = 0
[ 4.943410] EA = 0, S1PTW = 0
[ 4.943413] FSC = 0x05: level 1 translation fault
[ 4.943416] Data abort info:
[ 4.943418] ISV = 0, ISS = 0x00000005, ISS2 = 0x00000000
[ 4.946220] CM = 0, WnR = 0, TnD = 0, TagAccess = 0
[ 4.955261] GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
[ 4.955268] swapper pgtable: 4k pages, 48-bit VAs, pgdp=0000000038e6c000
[ 4.961449] [ffff800272bcc000] pgd=0000000000000000
[ 4.969203] , p4d=1000000039739003
[ 4.979730] , pud=0000000000000000
[ 4.980210] phandle (CPU): 0x0000005e, phandle (BE): 0x5e000000 for node "reset"
[ 4.991736] Internal error: Oops: 0000000096000005 [#1] PREEMPT SMP
...
[ 5.121359] pc : __srcu_read_lock+0x44/0x98
[ 5.131091] lr : gpio_name_to_desc+0x60/0x1a0
[ 5.153671] sp : ffff8000833bb430
[ 5.298440]
[ 5.298443] Call trace:
[ 5.298445] __srcu_read_lock+0x44/0x98
[ 5.309484] gpio_name_to_desc+0x60/0x1a0
[ 5.320692] gpiochip_add_data_with_key+0x488/0xf00
5.946419] ---[ end trace 0000000000000000 ]---
Move initialization code for gdev fields before it is added to
gpio_devices, with adjacent initialization code.
Adjust goto statements to reflect modified order of operations
[Bartosz: fixed a build issue, removed stray newline]
Security readout for executives and security teams
Plain-English summary
This is a Linux kernel reliability flaw in GPIO device registration. A race can let one driver use a GPIO device's SRCU state before another has initialized it, causing a kernel crash. The public record does not show data theft, privilege escalation, or active exploitation.
Executive priority
Track and patch through normal kernel maintenance, with higher priority for embedded, appliance, industrial, or custom-hardware fleets. Current evidence supports stability and availability risk, not confirmed exploitation or broad remote compromise.
Technical view
During gpiochip_add_data_with_key(), gpiodev_add_to_list_unlocked() can expose a gdev to gpio_name_to_desc() before gdev->srcu is initialized. A concurrent traversal can dereference uninitialized SRCU state and fault in __srcu_read_lock(). The fix moves gdev field initialization before insertion into gpio_devices.
Likely exposure
Exposure is most relevant to Linux systems using GPIO infrastructure and drivers that can concurrently register GPIO chips. The source lists Linux kernel versions including 6.9, 6.12.83, 6.18.6, and 6.19 as affected; downstream vendor backports may differ.
Exploitation context
No KEV listing or provided source indicates active exploitation. The described impact is a kernel crash from a race condition during driver activity, not a documented remote attack path. Triggerability likely depends on kernel configuration, hardware, and driver timing.
Researcher notes
Evidence is limited to the CVE text and upstream stable commits. The source describes the race, crash trace, and initialization-order fix, but provides no CVSS, CWE, exploit report, or precise downstream package matrix.
Mitigation direction
Apply Linux kernel stable updates containing the referenced gpiolib fix.
Check distribution or device-vendor advisories for backported kernel packages.
Prioritize systems with GPIO-heavy hardware or custom kernel drivers.
Avoid treating upstream version numbers as definitive for vendor kernels.
Validation and detection
Inventory Linux kernel versions and vendor patch levels.
Check whether deployed kernels include one of the referenced stable commits.
Review crash logs for __srcu_read_lock and gpio_name_to_desc traces.
Confirm GPIO driver registration paths in custom or embedded kernels.
Generated from the cited source records. This long-tail analysis has not been individually reviewed by a named human.
Potential ATT&CK relevance
Conservative CVE-to-ATT&CK context
These mappings and lookup hints may be relevant to the vulnerability behavior, CWE, affected product, or exposure path. Glexia-inferred context is not an official MITRE, ATT&CK, CWE, or CVE Program mapping.
ATT&CK lookup starting points
Use these exact CWE pages and searches to review the Glexia ATT&CK library from this CVE's weakness and description context.
cve · low confidence lookup
CVE-2026-22986 mapping review
Open the CVE-to-ATT&CK bridge for reviewed, inferred, or future official mappings tied to this CVE.
These fields come from the CVE record and ADP containers, not from Glexia's Take. They preserve time-varying source decisions such as CISA SSVC, KEV status, CVSS metrics, and provider references.
0CVSS vectors
3Timeline events
0ADP providers
4Source links
Vulnerability timeline
Timeline events are normalized from CVE metadata, CNA source timelines, ADP timelines, and KEV metadata when present.
CVE reservedCVE Program
The CVE ID was reserved by the assigning CNA.
CVE publishedCVE Program
The CVE record was published.
Jan 23, 2026, 15:24 UTC (UTC+00:00)
CVE updatedCVE Program
The CVE record metadata indicates this as the latest update time.