KernelScan.io

HIGH

atm Tasklet UAF

CVE-2026-43203

CVSS 7.5 / 10.0 NVD

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

KernelScan AI6.4MEDIUM

01

In the Linux kernel, the following vulnerability has been resolved: atm: fore200e: fix use-after-free in tasklets during device removal When the PCA-200E or SBA-200E adapter is being detached, the fore200e is deallocated. However, the tx_tasklet or rx_tasklet may still be running or pending, leading to use-after-free bug when the already freed fore200e is accessed again in fore200e_tx_tasklet() or fore200e_rx_tasklet(). One of the race conditions can occur as follows: CPU 0 (cleanup) | CPU 1 (tasklet) fore200e_pca_remove_one() | fore200e_interrupt() fore200e_shutdown() | tasklet_schedule() kfree(fore200e) | fore200e_tx_tasklet() | fore200e-> // UAF Fix this by ensuring tx_tasklet or rx_tasklet is properly canceled before the fore200e is released. Add tasklet_kill() in fore200e_shutdown() to synchronize with any pending or running tasklets. Moreover, since fore200e_reset() could prevent further interrupts or data transfers, the tasklet_kill() should be placed after fore200e_reset() to prevent the tasklet from being rescheduled in fore200e_interrupt(). Finally, it only needs to do tasklet_kill() when the fore200e state is greater than or equal to FORE200E_STATE_IRQ, since tasklets are uninitialized in earlier states. In a word, the tasklet_kill() should be placed in the FORE200E_STATE_IRQ branch within the switch...case structure. This bug was identified through static analysis.

02

Engine v0.2.0

Risk summary

Attackers with root privileges performing device removal can trigger a use-after-free vulnerability in the fore200e ATM driver. The missing tasklet synchronization during shutdown allows tx_tasklet or rx_tasklet to access freed memory, leading to potential arbitrary code execution, privilege escalation within the kernel, or system crashes.

Affecteddrivers/atm/fore200e.c (ATM driver)

Vulnerability analysis

The vulnerability occurs in the fore200e ATM driver when PCA-200E or SBA-200E adapters are detached. During device removal in fore200e_shutdown(), the fore200e structure is freed via kfree(), but tx_tasklet and rx_tasklet may still be running or pending on other CPUs. These tasklets can then access the freed fore200e structure in fore200e_tx_tasklet() or fore200e_rx_tasklet(), causing a use-after-free condition. The race window exists because tasklets scheduled by fore200e_interrupt() are not cancelled before the structure is released. The fix adds tasklet_kill() calls in the FORE200E_STATE_IRQ case of fore200e_shutdown() to synchronize with and cancel any pending tasklets before the structure is freed, ensuring proper cleanup ordering.

03

BranchFixed inPatch commit
5.105.10.25291f25749aaf5
5.155.15.20273fbc5d1a9cc
6.16.1.165aba0b4bc0937
6.126.12.7597900f512252
6.186.18.16e4ff4e3ffcf9
6.196.19.65189368f1090
6.66.6.128e075ec9b08f8
mainline7.08930878101cd