EDK II - NULL Pointer Dereference in CreateEventRing
In CreateEventRing, two UsbHcAllocateMem calls are guarded only by ASSERT (DEBUG-only, no-op in RELEASE) before ZeroMem dereferences the result.
- Advisory
- BYTERAY-2026-0267
- CWE
- CWE-690
- Vendor
- TianoCore
- Product
- EDK II
- Reported
- 2026-06-25
- Disclosure
- 2026-10-29
- Affected
- EDK II at commit 70741a15d9a714323a5598eac47727e60507e22f (master, 2026-06-21); affected code in MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c.
- Credit
- Argus-Systems
Executive Summary
In CreateEventRing, two UsbHcAllocateMem calls are guarded only by ASSERT (DEBUG-only, no-op in RELEASE) before ZeroMem dereferences the result. Line 811 allocates the Event Ring buffer; line 812 asserts; line 814 zeros it. The second allocation at line 830 (ERSTBase) follows the identical pattern: ASSERT-only at 831, then ZeroMem at 833.
This advisory is one of a set reported to VulnCheck on 2026-06-25 for coordinated disclosure to the EDK II maintainers. After several follow-ups over the following months no response was received. 126 days after the initial report, ByteRay is publishing the findings in good faith so that affected integrators can assess and remediate them. All findings were identified against EDK II commit 70741a15d9a714323a5598eac47727e60507e22f (master, 2026-06-21).
Affected Products and Versions
- Vendor: TianoCore
- Product: EDK II (
MdeModulePkg) - Affected commit:
70741a15d9a714323a5598eac47727e60507e22f(master, 2026-06-21). The code is present on that commit and later revisions that have not changed it. - Location:
MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c:811 - Function:
CreateEventRing - Category:
error_handling
Technical Details
Controllability: SYSTEM_CONTROLLED — confidence: high. Called during XHCI controller initialization, not directly from external input. Failure requires memory pressure during controller setup.
Data Flow
At line 811, Buf = UsbHcAllocateMem(Xhc->MemPool, Size, TRUE) returns NULL on failure. At line 812, ASSERT(Buf != NULL) is a no-op in RELEASE. At line 814, ZeroMem(Buf, Size) dereferences NULL. A second allocation at lines 830–833 follows the identical pattern (ERSTBase).
Affected Callers
XhcInitSched(XhciSched.c:642), called fromXhcDriverBindingStart(Xhci.c:2102) andXhcReset(Xhci.c:214)
Sanitization / Security Controls
- ASSERT — DEBUG-only.
Reachability and Preconditions
Attacker position and trust level for this issue are stated in the Controllability line and Data Flow above, and the concrete trigger is in Reproduction below.
Exploitability: Low
Realism: Low
Reproduction
- Memory pressure during XHCI controller initialization; RELEASE build.
CreateEventRingcallsUsbHcAllocateMemat line 811.UsbHcAllocateMemreturns NULL under memory pressure.ASSERT(Buf != NULL)at line 812 compiles to no-op in RELEASE builds.ZeroMem(Buf, Size)at line 814 dereferences NULL, crashing the firmware.
Impact
Denial of service — firmware crash during XHCI controller setup.
Remediation and Mitigation
As of commit 70741a15d9a714323a5598eac47727e60507e22f this issue is unfixed upstream and no CVE has been assigned. Check the allocation result for NULL before dereferencing it and fail the operation cleanly when allocation fails. The specific control that is absent or ineffective is identified in the Sanitization / Security Controls list under Technical Details.
Timeline
- 2026-06-25 - Reported to VulnCheck for coordinated disclosure to the TianoCore / EDK II security team.
- 2026-07 to 2026-10 - Several follow-ups sent; no response received.
- 2026-10-29 - Public disclosure in good faith, 126 days after the initial report.
Credits
Discovered and reported by Argus-Systems.