HIGH
atm Tasklet UAF
CVE-2026-43203
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H
KernelScan AI6.4MEDIUM
01Description
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.
02KernelScan AI Analysis
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.
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.
03Fix Versions
| Branch | Fixed in | Patch commit |
|---|---|---|
| 5.10 | 5.10.252 | 91f25749aaf5 |
| 5.15 | 5.15.202 | 73fbc5d1a9cc |
| 6.1 | 6.1.165 | aba0b4bc0937 |
| 6.12 | 6.12.75 | 97900f512252 |
| 6.18 | 6.18.16 | e4ff4e3ffcf9 |
| 6.19 | 6.19.6 | 5189368f1090 |
| 6.6 | 6.6.128 | e075ec9b08f8 |
| mainline | 7.0 | 8930878101cd |