CVE-2026-89440
nicheUse-After-Free in Linux Kernel via-sdmmc Driver on Probe Failure
The Linux kernel's VIA SD/MMC host controller driver (via-sdmmc) leaves the SD card-detect interrupt registered and enabled when mmc_add_host() fails during probe, because the original error path only unmapped the registers. The interrupt handler via_sdc_isr() then dereferences the freed host structure and its unmapped MMIO base, and schedules carddet_work, which via_sdc_card_detect() also runs against freed memory via its container_of() dereference. A local attacker with low privileges (CVSS 3.1: 7.8, AV:L/AC:L/PR:L/UI:N) could potentially leverage this use-after-free for kernel memory corruption, resulting in privilege escalation, information disclosure, or a system crash. Only systems with the VIA SD/MMC driver enabled (CONFIG_MMC_VIA_SDMMC) on compatible VIA chipsets are affected, and the bug additionally requires a rare probe failure to reach the vulnerable error path. No public proof-of-concept is known and the issue is not in the CISA KEV catalog; it was found by in-house static analysis and confirmed by manual code review.
What to do: Update to a kernel release containing the fix, which adds a proper probe-error path that disables and frees the card-detect interrupt, cancels carddet_work, and re-masks PCIINTCTRL before unmapping. On VIA SD/MMC hardware, check whether via_sdmmc is built in or loaded (e.g., lsmod or kernel config) and disable CONFIG_MMC_VIA_SDMMC if the SD host is unused. As defense in depth, restrict local unprivileged account access on systems that do require the driver.
| Linux kernel (drivers/mmc/host/via-sdmmc.c, VIA SD/MMC host controller driver) | — |
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: stop card-detect handling on probe failure request_irq() registers the SD card-detect interrupt and the probe enables it before mmc_add_host() runs. If mmc_add_host() fails, the error path only unmaps the registers and returns: the interrupt stays registered, so the handler keeps running against the host once it is freed. via_sdc_isr() dereferences sdhost and its MMIO base and schedules carddet_work, which via_sdc_card_detect() also runs against freed memory through its container_of() dereference. Add a probe-error path that disables and frees the interrupt and cancels carddet_work before unmapping. carddet_work can re-enable the device interrupt via via_reset_pcictrl(), which restores PCIINTCTRL, so mask it again after cancelling the work. 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.