Skip to main content

CVE-2026-98258

Microsoft — posix-cpu-timers: Prevent freeing a timer which is queued on the expiry list

Microsoft · Not classified by connected sources

Patch Tuesday
0

EVRS 0 of 100 Informational

Monitor

Rank 2,954 of 2,960 tracked

Download PDF

Why it scores 0

Evidence available: 2 of 8 signals

No strong exploitation, disclosure, or severity signal is available for this CVE yet.

  • CISA KEVDid not apply
  • RansomwareNo data
  • Vendor exploitationNo data
  • EPSSDid not apply
  • Microsoft Exploitability IndexNo data
  • Pre-patch disclosureNo data
  • KEV recencyNo data
  • CVSSNo data

The band answers “how soon”, not “how bad”. No data for: Ransomware, Vendor exploitation, Microsoft Exploitability Index, Pre-patch disclosure, KEV recency, CVSS. Why some signals show no data

Fix

Patch or fixed version identified

Fixed in

openSUSE Tumbleweed -> kernel-devel-0:7.2.10-1.1.aarch64 | linux -> 7.2.8-1

Affected versions

Not identified by the connected sources

Fixed versions from NVD.

Evidence

Each value with its source
MeasureValueSource
CVSS base scoreHow severe the flaw is in itself. It does not say how likely an attack is. Not publishedNVD and the CVE record were checked and hold no score. NVD
FIRST EPSSFIRST's estimate of the chance this is exploited in the next 30 days, and how that ranks against all CVEs. 0.001 (2.8th pctl) FIRST EPSS
Actively exploitedWhether a source of record has confirmed attacks using it in the wild. Not confirmed Patch Tuesday
Public exploit moduleA module existing is not the same as active exploitation. None known Metasploit
EUVD cross-referenceENISA's record: CVSS 7.8 (v3.1), assigned by Linux. Listed ENISA EUVD

Description

NVD

In the Linux kernel, the following vulnerability has been resolved: posix-cpu-timers: Prevent freeing a timer which is queued on the expiry list Kijo analyzed another race in the POSIX CPU timer code: Commit bf635681c906 converted cpu_timer::firing from a tristate value to a boolean. This lost the distinction between "not owned by the firing list" and "still owned, but delivery was canceled". The resulting race is: expiry handler timer_settime() timer_delete() -------------- --------------- -------------- collect timer onto private firing list firing = true observes firing = true firing = false return TIMER_RETRY wait for handler observes firing = false finish deletion unhash and free timer resume list traversal read freed elist.next -> UAF The firing bit is clearly the wrong indicator since that commit. Check whether the timer is queued on the expiry list or not instead. If it is queued clear the firing bit to prevent signal delivery as before and return TIMER_RETRY so the caller unlocks the timer which allows the expiry code to make progress and remove it from the list.