CVE-2026-89893 Overview
CVE-2026-89893 is a use-after-free vulnerability in the Linux kernel's cx23885 media driver, specifically in the NetUP Common Interface (CI) teardown path. The netup_ci_exit() function frees a netup_ci_state structure while its work item, netup_read_ci_status(), may still be pending or executing on the system workqueue. The worker resolves the state via container_of() and dereferences it, creating a race between teardown and worker execution. An attacker with local access can leverage this race to trigger memory corruption in kernel space.
Critical Impact
Successful exploitation can result in kernel memory corruption, leading to privilege escalation, denial of service, or arbitrary kernel code execution on affected Linux systems.
Affected Products
- Linux kernel builds including the cx23885 media driver with NetUP CI support
- Multiple stable kernel branches patched via commits 140ecbc, 4e143d6, 5deec89, 99cd62b, aaf7679, bf3f492, ec82b0c, and f7ff5adb
- Systems using NetUP DVB tuner hardware backed by the cx23885 bridge chip
Discovery Timeline
- 2026-09-16 - CVE CVE-2026-89893 published to NVD
- 2026-09-16 - Last updated in NVD database
Technical Details for CVE-2026-89893
Vulnerability Analysis
The vulnerability resides in the NetUP Common Interface teardown logic within the cx23885 DVB bridge driver. netup_ci_init() queues an initial status read, and subsequent CI GPIO interrupts queue the same work item through netup_ci_slot_status(). During device removal, cx23885_finidev() calls free_irq() before the CI device is unregistered.
While free_irq() prevents new IRQ handlers from executing, it does not drain work already queued on the system workqueue. As a result, netup_read_ci_status() can still be pending or actively running when netup_ci_exit() releases the netup_ci_state structure. When the deferred worker resumes, it dereferences freed memory through container_of(), producing a classic use-after-free condition [CWE-416].
Root Cause
The root cause is missing synchronization between workqueue lifecycle management and driver teardown. The driver releases the netup_ci_state via dvb_ca_en50221_release() and kfree() without first calling cancel_work_sync() to ensure no worker holds a reference to the state. The fix explicitly cancels the pending work before freeing the structure.
Attack Vector
Exploitation requires local access with sufficient privileges to trigger device teardown or module unload of an affected driver. An attacker with the ability to generate CI GPIO activity while the driver unregisters can race the worker against the free, corrupting kernel heap memory. Successful exploitation can be leveraged for privilege escalation or to crash the kernel. Because the flaw is bounded to the local attack surface, remote exploitation is not applicable.
No verified public proof-of-concept code is available. The upstream patches applied across multiple stable trees are the authoritative technical reference. See the Kernel Commit 140ecbc for the specific fix introducing cancel_work_sync() before release.
Detection Methods for CVE-2026-89893
Indicators of Compromise
- Kernel oops or panic logs referencing netup_read_ci_status, netup_ci_exit, or cx23885 during module unload or device removal.
- KASAN or SLUB debugging reports flagging use-after-free access within the netup_ci_state allocation.
- Unexpected system crashes correlated with hot-unplug or rmmod of cx23885 driver modules.
Detection Strategies
- Enable CONFIG_KASAN in test kernels to surface use-after-free access on the freed netup_ci_state.
- Audit installed kernel packages against distribution advisories referencing the listed stable commits.
- Monitor kernel ring buffer (dmesg) for stack traces implicating the cx23885 CI teardown path.
Monitoring Recommendations
- Forward journald and /var/log/kern.log events to a centralized logging platform for anomaly review.
- Alert on repeated kernel oopses on hosts equipped with NetUP DVB hardware.
- Track kernel version inventory to confirm patched builds are deployed across the fleet.
How to Mitigate CVE-2026-89893
Immediate Actions Required
- Update to a Linux kernel release that includes the fix from the referenced stable commits.
- Restrict local access to systems using the cx23885 driver until patches are applied.
- Blacklist the cx23885 module on hosts that do not require NetUP DVB functionality.
Patch Information
The upstream fix adds cancel_work_sync() before dvb_ca_en50221_release() and kfree() in netup_ci_exit(), ensuring queued workers complete before the state structure is freed. The patch has been backported across multiple stable branches. Refer to Kernel Commit 4e143d66, Kernel Commit 5deec890, Kernel Commit 99cd62b9, Kernel Commit aaf76794, Kernel Commit bf3f4927, Kernel Commit ec82b0cf, and Kernel Commit f7ff5adb for backport details.
Workarounds
- Prevent loading of the vulnerable driver by adding blacklist cx23885 to /etc/modprobe.d/ configuration.
- Physically disconnect NetUP DVB CI hardware where the driver cannot be updated immediately.
- Restrict privileged local access and disallow user-triggered module removal on multi-user hosts.
# Blacklist the cx23885 driver until the patched kernel is installed
echo 'blacklist cx23885' | sudo tee /etc/modprobe.d/blacklist-cx23885.conf
sudo update-initramfs -u
sudo reboot
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

