Skip to main content

Linux Kernel CVE-2026-45949

| EUVDEUVD-2026-32233 MEDIUM
Race Condition (CWE-362)
2026-05-27 416baaa9-dc9f-4396-8d5f-8c081fb06d67 GHSA-f8m7-rc76-gphg
4.7
CVSS 3.1 · NVD
Share

Severity by source

NVD PRIMARY
4.7 MEDIUM
AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H
vuln.today AI
4.7 MEDIUM

Local-only kernel race requiring device hot-plug privileges (AV:L, PR:L), timing-sensitive TOCTOU window (AC:H), impact is kernel crash only with no confidentiality or integrity consequence (A:H, C:N, I:N).

3.1 AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H
4.0 AV:L/AC:H/AT:P/PR:L/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
SUSE
6.4 MEDIUM
AV:L/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:H
Red Hat
5.5 MEDIUM
qualitative

Primary rating from NVD.

CVSS VectorNVD

CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H
Attack Vector
Local
Attack Complexity
High
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

Lifecycle Timeline

3
Analysis Generated
Jun 16, 2026 - 02:38 vuln.today
CVSS changed
Jun 16, 2026 - 02:37 NVD
4.7 (MEDIUM)
CVE Published
May 27, 2026 - 14:17 nvd
UNKNOWN (no severity yet)

DescriptionNVD

In the Linux kernel, the following vulnerability has been resolved:

hwrng: core - use RCU and work_struct to fix race condition

Currently, hwrng_fill is not cleared until the hwrng_fillfn() thread exits. Since hwrng_unregister() reads hwrng_fill outside the rng_mutex lock, a concurrent hwrng_unregister() may call kthread_stop() again on the same task.

Additionally, if hwrng_unregister() is called immediately after hwrng_register(), the stopped thread may have never been executed. Thus, hwrng_fill remains dirty even after hwrng_unregister() returns. In this case, subsequent calls to hwrng_register() will fail to start new threads, and hwrng_unregister() will call kthread_stop() on the same freed task. In both cases, a use-after-free occurs:

refcount_t: addition on 0; use-after-free. WARNING: ... at lib/refcount.c:25 refcount_warn_saturate+0xec/0x1c0 Call Trace: kthread_stop+0x181/0x360 hwrng_unregister+0x288/0x380 virtrng_remove+0xe3/0x200

This patch fixes the race by protecting the global hwrng_fill pointer inside the rng_mutex lock, so that hwrng_fillfn() thread is stopped only once, and calls to kthread_run() and kthread_stop() are serialized with the lock held.

To avoid deadlock in hwrng_fillfn() while being stopped with the lock held, we convert current_rng to RCU, so that get_current_rng() can read current_rng without holding the lock. To remove the lock from put_rng(), we also delay the actual cleanup into a work_struct.

Since get_current_rng() no longer returns ERR_PTR values, the IS_ERR() checks are removed from its callers.

With hwrng_fill protected by the rng_mutex lock, hwrng_fillfn() can no longer clear hwrng_fill itself. Therefore, if hwrng_fillfn() returns directly after current_rng is dropped, kthread_stop() would be called on a freed task_struct later. To fix this, hwrng_fillfn() calls schedule() now to keep the task alive until being stopped. The kthread_stop() call is also moved from hwrng_unregister() to drop_current_rng(), ensuring kthread_stop() is called on all possible paths where current_rng becomes NULL, so that the thread would not wait forever.

AnalysisAI

Use-after-free race condition in the Linux kernel hwrng (hardware random number generator) core subsystem allows a local attacker with low privileges to crash the kernel, causing a denial of service. The race occurs when hwrng_register() and hwrng_unregister() execute concurrently, leaving the hwrng_fill pointer dirty and enabling kthread_stop() to be invoked on an already-freed task_struct - confirmed in the virtrng_remove call path, making virtualized Linux environments a primary real-world attack surface. No public exploit code exists and no active exploitation (KEV) has been confirmed; the EPSS score of 0.02% reflects minimal opportunistic exploitation activity.

Technical ContextAI

The vulnerability resides in drivers/char/hw_random/core.c, the Linux kernel's hwrng subsystem introduced in version 3.17 (commit be4000bc4644d027c519b6361f5ae3bbfc52c347). The root cause is CWE-362 (Concurrent Execution Using Shared Resource with Improper Synchronization): the global hwrng_fill pointer, which holds the kthread task_struct, is read inside hwrng_unregister() without holding the rng_mutex lock, creating a TOCTOU window. In one race path, a concurrent hwrng_unregister() calls kthread_stop() twice on the same task. In a second path, if hwrng_unregister() is called immediately after hwrng_register() before the thread runs, hwrng_fill is never cleared, causing subsequent hwrng_register() calls to fail to start new threads, and hwrng_unregister() to call kthread_stop() on the freed task_struct - both triggering a use-after-free (refcount_t addition on 0). The fix serializes kthread_run()/kthread_stop() under rng_mutex, converts current_rng to RCU for lockless reads in hwrng_fillfn(), and defers cleanup into a work_struct to avoid deadlock. Affected CPE: cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* from 3.17 through pre-patch versions.

RemediationAI

The primary remediation is to upgrade to a patched kernel release: 6.12.75 (for the 6.12.x stable series), 6.18.14 (for 6.18.x), 6.19.4 (for 6.19.x), or 7.0, as confirmed by EUVD-2026-32233. Individual stable branch commits are available at https://git.kernel.org/stable/c/ad38f2cdfef9a2f2899c30cad269baec5bfd4a5d, https://git.kernel.org/stable/c/cc2f39d6ac48e6e3cb2d6240bc0d6df839dd0828, https://git.kernel.org/stable/c/d5b7730f06994499632026c30e38e0317c4569e2, and https://git.kernel.org/stable/c/dcf416eb88eafe1e3c0f920a14bdffd10bc4d259. If an immediate kernel upgrade is not feasible, restrict concurrent virtio-rng hot-plug and hot-unplug operations by performing virtrng device attach/detach only during scheduled maintenance windows with no competing hwrng activity - this narrows the race window significantly, though it does not eliminate it. Alternatively, unloading the hw_random kernel module (modprobe -r hw_random) on systems that do not require hardware RNG input eliminates the attack surface entirely, with the trade-off of reducing entropy availability to /dev/random consumers, which may affect cryptographic services relying on hardware entropy.

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Affected
SUSE Linux Enterprise Desktop 15 SP7 Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Affected
SUSE Linux Enterprise High Performance Computing 15 SP7 Affected

Share

CVE-2026-45949 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy