KernelScan.io

HIGH Introduced in 6.4

module DupReq UAF

CVE-2026-90291

CVSS 7.8 / 10.0 NVD

CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

KernelScan AI7.0HIGH

01

In the Linux kernel, the following vulnerability has been resolved: module/dups: Fix use-after-free in kmod_dup_req lifetime handling The kmod dups code uses RCU to ensure that a kmod_dup_req instance is freed only after it is no longer referenced. When releasing an instance, the kmod_dup_request_delete() function removes the kmod_dup_req from the dup_kmod_reqs list, waits via synchronize_rcu() and finally frees it. However, this doesn't work correctly because parallel users referencing the instance in kmod_dup_request_exists_wait() don't enter an RCU read-side critical section. This can result in a use-after-free. The kmod_dup_request_exists_wait() function may need to hold a valid reference to a kmod_dup_req instance across a blocking wait until the corresponding modprobe command completes. This makes it unsuitable for RCU. Fix the issue by changing the lifecycle management of kmod_dup_req to use reference counting.

02

Engine v0.6.0

Risk summary

A use-after-free in the kernel module auto-loading deduplication code allows a local unprivileged attacker to corrupt kernel heap memory by racing concurrent module load requests. The bug requires the kernel to be built with the duplicate module request debugging option (CONFIG_MODULE_DEBUG_AUTOLOAD_DUPS). Successful exploitation could lead to privilege escalation or a kernel crash.

Affectedkernel/module/dups.c (module auto-loading deduplication)

Vulnerability analysis

The kernel's module auto-loading deduplication feature can free a tracking object while another thread is still using it, because the code that waits for a module load to complete does not properly protect the object from being freed during that wait. The fix replaces this broken lifetime management with explicit reference counting, so the object is freed only when no thread holds a reference to it. Any local unprivileged user who can trigger automatic module loading—for example by requesting an uncommon socket protocol or filesystem type—can reach this code path, but only when the kernel is compiled with the duplicate module request debugging option enabled.

03

BranchIntroducedFixed inPatch commit
6.126.46.12.1102c85e0fb528e
6.186.46.18.52b2709aad7599
mainline6.47.3-rc15eecb11b543f
7.26.47.2.6cd2396fc9684
cip/6.126.46.12.111-cip322c85e0fb528e