Skip to main content

Linux Kernel CVE-2025-39994

HIGH
2025-10-15 416baaa9-dc9f-4396-8d5f-8c081fb06d67
7.3
CVSS 3.1 · Vendor: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
Share

Severity by source

Vendor (416baaa9-dc9f-4396-8d5f-8c081fb06d67) PRIMARY
7.3 HIGH
AV:L/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:H
vuln.today AI
6.7 MEDIUM

Local vector needing low privilege and device teardown (UI:R); winning the delayed-work race is non-deterministic so AC:H; kernel UAF yields high C/I/A.

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

Primary rating from Vendor (416baaa9-dc9f-4396-8d5f-8c081fb06d67).

CVSS VectorVendor: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

Attack Vector
Local
Attack Complexity
Low
Privileges Required
Low
User Interaction
Required
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

2
Analysis Generated
Jul 30, 2026 - 08:03 vuln.today
CVE Published
Oct 15, 2025 - 08:15 cve.org
HIGH 7.3

DescriptionCVE.org

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

media: tuner: xc5000: Fix use-after-free in xc5000_release

The original code uses cancel_delayed_work() in xc5000_release(), which does not guarantee that the delayed work item timer_sleep has fully completed if it was already running. This leads to use-after-free scenarios where xc5000_release() may free the xc5000_priv while timer_sleep is still active and attempts to dereference the xc5000_priv.

A typical race condition is illustrated below:

CPU 0 (release thread) | CPU 1 (delayed work callback) xc5000_release() | xc5000_do_timer_sleep() cancel_delayed_work() | hybrid_tuner_release_state(priv) | kfree(priv) |

| priv = container_of() // UAF Replace cancel_delayed_work() with cancel_delayed_work_sync() to ensure that the timer_sleep is properly canceled before the xc5000_priv memory is deallocated.

A deadlock concern was considered: xc5000_release() is called in a process context and is not holding any locks that the timer_sleep work item might also need. Therefore, the use of the _sync() variant is safe here.

This bug was initially identified through static analysis.

[hverkuil: fix typo in Subject: tunner -> tuner]

AnalysisAI

Local privilege escalation and memory corruption in the Linux kernel's xc5000 DVB tuner driver (media subsystem) arises from a use-after-free in xc5000_release(): the function used cancel_delayed_work() which does not wait for an already-running timer_sleep delayed work item, so the xc5000_priv structure can be kfree()'d while the work callback still dereferences it. An attacker able to trigger tuner device teardown while the delayed work is active can win the race and cause the callback to operate on freed memory, potentially corrupting kernel memory. There is no public exploit identified at time of analysis and the flaw carries a low EPSS (0.22%); it was found via static analysis and fixed upstream.

Technical ContextAI

The affected component is drivers/media/tuners/xc5000.c, the driver for Xceive XC5000/XC5000C silicon TV tuners used on DVB/analog TV capture devices. The driver schedules a deferred power-management routine (xc5000_do_timer_sleep) as a kernel delayed_work item. The root cause is a classic use-after-free (CWE-416) driven by a race condition (CWE-362): xc5000_release() frees the per-instance xc5000_priv via hybrid_tuner_release_state() after calling cancel_delayed_work(), which only cancels a not-yet-started timer but returns without blocking if the work is mid-execution. The callback then resolves priv through container_of() on already-freed memory. The fix replaces cancel_delayed_work() with cancel_delayed_work_sync(), which blocks until any in-flight work completes before the free; the commit message notes release runs in process context holding no locks the work needs, so the synchronous variant does not risk deadlock.

Affected ProductsAI

The Linux kernel media/DVB subsystem, specifically the xc5000 tuner driver (drivers/media/tuners/xc5000.c), is affected across multiple maintained branches, as indicated by the nine stable-tree fix commits on git.kernel.org (e.g. 3f876cd47ed8, 40b7a19f321e, 4266f012806f, 71ed8b81a490, 9a00de20ed8b, bc4ffd962ce1, df0303b48395, e2f5eaafc030, effb1c195838). No CPE strings were provided in the input, so exact version ranges are not enumerated here; the presence of multiple backport commits indicates the bug is long-standing and was patched across several stable series. Only systems that build/load the xc5000 tuner module and expose a compatible TV tuner device are meaningfully exposed.

RemediationAI

Upstream fix available (PR/commit); released patched version not independently confirmed - apply the kernel update from your distribution that incorporates the xc5000 fix (the change swaps cancel_delayed_work() for cancel_delayed_work_sync() in xc5000_release). Track the corresponding stable commits at https://git.kernel.org/stable/c/3f876cd47ed8bca1e28d68435845949f51f90703 and the related backports (40b7a19f321e65789612ebaca966472055dab48c, 4266f012806fc18e46da4a04d130df59a4946f93, 71ed8b81a4906cb785966910f39cf7f5ad60a69e, 9a00de20ed8ba90888479749b87bc1532cded4ce, bc4ffd962ce16a154c44c68853b9d93f5b6fc4b8, df0303b4839520b84d9367c2fad65b13650a4d42, e2f5eaafc0306a76fb1cb760aae804b065b8a341, effb1c19583bca7022fa641a70766de45c6d41ac) and pick the fixed release matching your kernel series. As a compensating control until patched, blacklist/unload the xc5000 module (e.g. add 'blacklist xc5000' via modprobe) on systems that do not use an XC5000-based TV tuner, which removes the vulnerable code path at the cost of disabling those tuner devices; restricting physical/local access to affected media hardware also reduces exposure since the vector is local.

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
Container suse/hpc/warewulf4-x86_64/sle-hpc-node:15.6.17.8.134 Image SLES15-SP6 Image SLES15-SP6-BYOS Image SLES15-SP6-BYOS-Azure Image SLES15-SP6-BYOS-EC2 Image SLES15-SP6-BYOS-GCE Image SLES15-SP6-CHOST-BYOS Image SLES15-SP6-CHOST-BYOS-Aliyun Image SLES15-SP6-CHOST-BYOS-Azure Image SLES15-SP6-CHOST-BYOS-EC2 Image SLES15-SP6-CHOST-BYOS-GCE Image SLES15-SP6-CHOST-BYOS-GDC Image SLES15-SP6-CHOST-BYOS-SAP-CCloud Image SLES15-SP6-EC2 Image SLES15-SP6-EC2-ECS-HVM Image SLES15-SP6-GCE Image SLES15-SP6-HPC-BYOS Image SLES15-SP6-HPC-BYOS-Azure Image SLES15-SP6-HPC-BYOS-EC2 Image SLES15-SP6-HPC-BYOS-GCE Image SLES15-SP6-HPC-EC2 Image SLES15-SP6-HPC-GCE Image SLES15-SP6-Hardened-BYOS Image SLES15-SP6-Hardened-BYOS-Azure Image SLES15-SP6-Hardened-BYOS-EC2 Image SLES15-SP6-Hardened-BYOS-GCE Image SLES15-SP6-SAP Image SLES15-SP6-SAP-Azure Image SLES15-SP6-SAP-EC2 Image SLES15-SP6-SAP-GCE Image SLES15-SP6-SAPCAL Image SLES15-SP6-SAPCAL-Azure Image SLES15-SP6-SAPCAL-EC2 Image SLES15-SP6-SAPCAL-GCE Affected
Container suse/sl-micro/6.0/baremetal-os-container:latest Container suse/sl-micro/6.0/toolbox:latest Affected
Container suse/sl-micro/6.0/base-os-container:2.1.3-7.65 Image SLE-Micro Image SLE-Micro-Azure Image SLE-Micro-BYOS Image SLE-Micro-BYOS-Azure Image SLE-Micro-BYOS-EC2 Image SLE-Micro-BYOS-GCE Image SLE-Micro-EC2 Image SLE-Micro-GCE Affected
Container suse/sl-micro/6.0/kvm-os-container:2.1.3-6.88 Affected
Container suse/sl-micro/6.0/rt-os-container:2.1.3-7.105 Affected

Share

CVE-2025-39994 vulnerability details – vuln.today

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