CVE-2026-89441
nicheUse-After-Free in Linux Kernel via-sdmmc Driver on Device Removal
A use-after-free exists in the Linux kernel's VIA SD/MMC host controller driver (drivers/mmc/host/via-sdmmc.c): card-detect work (carddet_work) already queued by the interrupt handler can still run after via_sd_remove() returns, at which point the host structure and its MMIO base may have been freed, so the callback dereferences freed memory. The flaw is triggered by device removal or driver unbind on VIA-chipset hardware while a card-detect interrupt is pending, which requires local access with low privileges. Successful exploitation can yield kernel memory corruption with high impact on confidentiality, integrity, and availability (CVSS 3.1: 7.8). Only systems actually built on the affected VIA SD/MMC controller hardware are exposed by this code path; the flaw was found by static analysis and confirmed by code review, with no public PoC, no KEV listing, and no known exploitation.
What to do: Apply kernel security updates once your distro backports the fix, which cancels carddet_work after freeing the IRQ and before cancelling finish_bh_work, then re-masks the interrupt after via_reset_pcictrl(). Check whether VIA SD/MMC host controller hardware is present (e.g., via lspci) — systems without the device are not reachable through this code path. As a mitigation on affected hosts, restrict local privileged access and the ability to unbind the driver or unload modules.
| Linux kernel (VIA SD/MMC host controller driver, via-sdmmc) | All kernel versions containing the vulnerable card-detect work handling prior to the fixing commit; no specific affected or fixed version numbers were provided |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
In the Linux kernel, the following vulnerability has been resolved: mmc: via-sdmmc: cancel card-detect work on remove Disabling the device interrupt and freeing the IRQ prevents new card-detect work from being queued, but carddet_work already queued by the handler can still run after via_sd_remove() returns. via_sdc_card_detect() recovers the host through container_of() and dereferences its MMIO base; once remove() returns the host can be freed, so that work would touch freed memory. Cancel carddet_work after freeing the IRQ and before cancelling finish_bh_work, which the card-detect handler can also queue. carddet_work can re-enable the interrupt through via_reset_pcictrl(); mask it again afterwards. This issue was found by an in-house static analysis tool and confirmed by manual code review.
- Vector
- CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
In the news0 stories
No ingested article mentions this CVE yet.