Security Vulnerability Report
中文
CVE-2026-31574 CVSS 5.5 MEDIUM

CVE-2026-31574

Published: 2026-04-24 15:16:32
Last Modified: 2026-05-19 14:22:43
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

Description

In the Linux kernel, the following vulnerability has been resolved: clockevents: Add missing resets of the next_event_forced flag The prevention mechanism against timer interrupt starvation missed to reset the next_event_forced flag in a couple of places: - When the clock event state changes. That can cause the flag to be stale over a shutdown/startup sequence - When a non-forced event is armed, which then prevents rearming before that event. If that event is far out in the future this will cause missed timer interrupts. - In the suspend wakeup handler. That led to stalls which have been reported by several people. Add the missing resets, which fixes the problems for the reporters.

CVSS Details

CVSS Score
5.5
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H

Configurations (Affected Products)

cpe:2.3:o:linux:linux_kernel:7.0:-:*:*:*:*:*:* - VULNERABLE
Linux Kernel (修复前版本)

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#include <stdio.h> #include <time.h> #include <signal.h> #include <unistd.h> #include <stdlib.h> // Conceptual Proof of Concept for CVE-2026-31574 // This code attempts to trigger the logic error by manipulating timers. void handler(int sig) { printf("Timer signal received\n"); } int main() { timer_t timerid; struct sigevent sev; struct itimerspec its; struct sigaction sa; // Establish handler for timer signal sa.sa_flags = SA_SIGINFO; sa.sa_handler = handler; sigemptyset(&sa.sa_mask); sigaction(SIGRTMIN, &sa, NULL); // Create the timer sev.sigev_notify = SIGEV_SIGNAL; sev.sigev_signo = SIGRTMIN; sev.sigev_value.sival_ptr = &timerid; timer_create(CLOCK_REALTIME, &sev, &timerid); // Arm the timer with a very long duration to simulate the 'far out' event its.it_value.tv_sec = 100000; // Far out in the future its.it_value.tv_nsec = 0; its.it_interval.tv_sec = 0; its.it_interval.tv_nsec = 0; timer_settime(timerid, 0, &its, NULL); printf("Timer armed with long duration. Attempting to trigger state change...\n"); // In a real exploit scenario, specific interaction with the clockevent // device (e.g., triggering suspend/resume or changing clock source) // would be required to hit the missing reset of next_event_forced. sleep(1); // Cleanup timer_delete(timerid); return 0; }

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-31574", "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "published": "2026-04-24T15:16:32.020", "lastModified": "2026-05-19T14:22:43.347", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nclockevents: Add missing resets of the next_event_forced flag\n\nThe prevention mechanism against timer interrupt starvation missed to reset\nthe next_event_forced flag in a couple of places:\n\n - When the clock event state changes. That can cause the flag to be\n stale over a shutdown/startup sequence\n\n - When a non-forced event is armed, which then prevents rearming before\n that event. If that event is far out in the future this will cause\n missed timer interrupts.\n\n - In the suspend wakeup handler.\n\nThat led to stalls which have been reported by several people.\n\nAdd the missing resets, which fixes the problems for the reporters."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H", "baseScore": 5.5, "baseSeverity": "MEDIUM", "attackVector": "LOCAL", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "NONE", "availabilityImpact": "HIGH"}, "exploitabilityScore": 1.8, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "NVD-CWE-noinfo"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:7.0:-:*:*:*:*:*:*", "matchCriteriaId": "EF897730-3F1E-47A2-8B07-22535202C487"}]}]}], "references": [{"url": "https://git.kernel.org/stable/c/4096fd0e8eaea13ebe5206700b33f49635ae18e5", "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "tags": ["Patch"]}, {"url": "https://git.kernel.org/stable/c/9401b593fa48218d2667df1610b0ebc518554880", "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "tags": ["Patch"]}]}}