{"id":"CVE-2026-89441","state":"PUBLISHED","title":"mmc: via-sdmmc: cancel card-detect work on remove","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nmmc: via-sdmmc: cancel card-detect work on remove\n\nDisabling the device interrupt and freeing the IRQ prevents new card-detect\nwork from being queued, but carddet_work already queued by the handler can\nstill run after via_sd_remove() returns. via_sdc_card_detect() recovers the\nhost through container_of() and dereferences its MMIO base; once remove()\nreturns the host can be freed, so that work would touch freed memory.\n\nCancel carddet_work after freeing the IRQ and before cancelling\nfinish_bh_work, which the card-detect handler can also queue. carddet_work\ncan re-enable the interrupt through via_reset_pcictrl(); mask it again\nafterwards.\n\nThis issue was found by an in-house static analysis tool and confirmed by\nmanual code review.","publishedAt":"2026-09-11T19:43:10.083Z","updatedAt":"2026-10-30T12:31:41.816Z","severity":{"score":7.8,"label":"High","version":"3.1","vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","source":"Linux"},"assigner":"Linux","products":["Linux Linux"],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"f0bf7f61b8405224bc52fc9a3ccd167a68126e00","status":"affected","lessThan":"28e8e9e1f3bdb75b611ea14c39775455528c4012","versionType":"git"},{"version":"f0bf7f61b8405224bc52fc9a3ccd167a68126e00","status":"affected","lessThan":"a32603f9b4dd0a1c3ea5845eec7c95f5f8741b3d","versionType":"git"},{"version":"f0bf7f61b8405224bc52fc9a3ccd167a68126e00","status":"affected","lessThan":"3ee1b5c8618a26811840bf9f45cb3120dac1e273","versionType":"git"},{"version":"f0bf7f61b8405224bc52fc9a3ccd167a68126e00","status":"affected","lessThan":"55d71c70f11d9f92c7d2653774001e98cb509deb","versionType":"git"},{"version":"f0bf7f61b8405224bc52fc9a3ccd167a68126e00","status":"affected","lessThan":"0a3c70191868fb007c03ff79693ad4e4b3fdcbb8","versionType":"git"},{"version":"f0bf7f61b8405224bc52fc9a3ccd167a68126e00","status":"affected","lessThan":"f7ff3027ef004a331ef911a4886f12bc2e996037","versionType":"git"},{"version":"f0bf7f61b8405224bc52fc9a3ccd167a68126e00","status":"affected","lessThan":"eaca730c6f5e3609df62a0469fb789235a93d276","versionType":"git"},{"version":"f0bf7f61b8405224bc52fc9a3ccd167a68126e00","status":"affected","lessThan":"57e5d877f898d5e5c9d672a77bb6bdd24f0d9bf5","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/mmc/host/via-sdmmc.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"2.6.31","status":"affected"},{"version":"0","status":"unaffected","lessThan":"2.6.31","versionType":"semver"},{"version":"5.10.273","status":"unaffected","lessThanOrEqual":"5.10.*","versionType":"semver"},{"version":"5.15.224","status":"unaffected","lessThanOrEqual":"5.15.*","versionType":"semver"},{"version":"6.1.191","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.160","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.112","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.50","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.2.4","status":"unaffected","lessThanOrEqual":"7.2.*","versionType":"semver"},{"version":"7.3","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/mmc/host/via-sdmmc.c"]}],"references":["https://git.kernel.org/stable/c/28e8e9e1f3bdb75b611ea14c39775455528c4012","https://git.kernel.org/stable/c/a32603f9b4dd0a1c3ea5845eec7c95f5f8741b3d","https://git.kernel.org/stable/c/3ee1b5c8618a26811840bf9f45cb3120dac1e273","https://git.kernel.org/stable/c/55d71c70f11d9f92c7d2653774001e98cb509deb","https://git.kernel.org/stable/c/0a3c70191868fb007c03ff79693ad4e4b3fdcbb8","https://git.kernel.org/stable/c/f7ff3027ef004a331ef911a4886f12bc2e996037","https://git.kernel.org/stable/c/eaca730c6f5e3609df62a0469fb789235a93d276","https://git.kernel.org/stable/c/57e5d877f898d5e5c9d672a77bb6bdd24f0d9bf5"],"weaknesses":[],"ingestedAt":"2026-10-30T12:50:04.827Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2026/89xxx/CVE-2026-89441.json","commit":"1f312381e38164a43607eebab851b151dd16861e","baselineCommit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-89441","state":"PUBLISHED","datePublished":"2026-09-11T19:43:10.083Z","dateUpdated":"2026-10-30T12:31:41.816Z","assignerShortName":"Linux","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateReserved":"2026-09-11T19:38:34.703Z"},"containers":{"cna":{"title":"mmc: via-sdmmc: cancel card-detect work on remove","descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nmmc: via-sdmmc: cancel card-detect work on remove\n\nDisabling the device interrupt and freeing the IRQ prevents new card-detect\nwork from being queued, but carddet_work already queued by the handler can\nstill run after via_sd_remove() returns. via_sdc_card_detect() recovers the\nhost through container_of() and dereferences its MMIO base; once remove()\nreturns the host can be freed, so that work would touch freed memory.\n\nCancel carddet_work after freeing the IRQ and before cancelling\nfinish_bh_work, which the card-detect handler can also queue. carddet_work\ncan re-enable the interrupt through via_reset_pcictrl(); mask it again\nafterwards.\n\nThis issue was found by an in-house static analysis tool and confirmed by\nmanual code review."}],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"f0bf7f61b8405224bc52fc9a3ccd167a68126e00","status":"affected","lessThan":"28e8e9e1f3bdb75b611ea14c39775455528c4012","versionType":"git"},{"version":"f0bf7f61b8405224bc52fc9a3ccd167a68126e00","status":"affected","lessThan":"a32603f9b4dd0a1c3ea5845eec7c95f5f8741b3d","versionType":"git"},{"version":"f0bf7f61b8405224bc52fc9a3ccd167a68126e00","status":"affected","lessThan":"3ee1b5c8618a26811840bf9f45cb3120dac1e273","versionType":"git"},{"version":"f0bf7f61b8405224bc52fc9a3ccd167a68126e00","status":"affected","lessThan":"55d71c70f11d9f92c7d2653774001e98cb509deb","versionType":"git"},{"version":"f0bf7f61b8405224bc52fc9a3ccd167a68126e00","status":"affected","lessThan":"0a3c70191868fb007c03ff79693ad4e4b3fdcbb8","versionType":"git"},{"version":"f0bf7f61b8405224bc52fc9a3ccd167a68126e00","status":"affected","lessThan":"f7ff3027ef004a331ef911a4886f12bc2e996037","versionType":"git"},{"version":"f0bf7f61b8405224bc52fc9a3ccd167a68126e00","status":"affected","lessThan":"eaca730c6f5e3609df62a0469fb789235a93d276","versionType":"git"},{"version":"f0bf7f61b8405224bc52fc9a3ccd167a68126e00","status":"affected","lessThan":"57e5d877f898d5e5c9d672a77bb6bdd24f0d9bf5","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/mmc/host/via-sdmmc.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"2.6.31","status":"affected"},{"version":"0","status":"unaffected","lessThan":"2.6.31","versionType":"semver"},{"version":"5.10.273","status":"unaffected","lessThanOrEqual":"5.10.*","versionType":"semver"},{"version":"5.15.224","status":"unaffected","lessThanOrEqual":"5.15.*","versionType":"semver"},{"version":"6.1.191","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.160","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.112","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.50","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.2.4","status":"unaffected","lessThanOrEqual":"7.2.*","versionType":"semver"},{"version":"7.3","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/mmc/host/via-sdmmc.c"]}],"references":[{"url":"https://git.kernel.org/stable/c/28e8e9e1f3bdb75b611ea14c39775455528c4012"},{"url":"https://git.kernel.org/stable/c/a32603f9b4dd0a1c3ea5845eec7c95f5f8741b3d"},{"url":"https://git.kernel.org/stable/c/3ee1b5c8618a26811840bf9f45cb3120dac1e273"},{"url":"https://git.kernel.org/stable/c/55d71c70f11d9f92c7d2653774001e98cb509deb"},{"url":"https://git.kernel.org/stable/c/0a3c70191868fb007c03ff79693ad4e4b3fdcbb8"},{"url":"https://git.kernel.org/stable/c/f7ff3027ef004a331ef911a4886f12bc2e996037"},{"url":"https://git.kernel.org/stable/c/eaca730c6f5e3609df62a0469fb789235a93d276"},{"url":"https://git.kernel.org/stable/c/57e5d877f898d5e5c9d672a77bb6bdd24f0d9bf5"}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","baseScore":7.8,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:L - The UAF is reached from via_sd_remove() on the VIA VT9530 PCI SD/MMC host when unbind, rmmod, or PCI hot-remove leaves carddet_work pending; no network, Bluetooth, or USB hotplug path enters this teardown.\nAC:L - CIR IRQ queues carddet_work and via_sdc_card_detect() sleeps in via_reset_pcictrl while the attacker retries PCI unbind/rebind, so both sides of the missing cancel_work_sync race are attacker-controlled and retryable; such UAFs score AC:L.\nPR:L - Per CNA driver-removal UAF precedent, including sibling CVE-2026-89440 on this same via-sdmmc driver, an unprivileged local user on a machine with this PCI reader can spray the freed host while teardown proceeds; init-namespace root is not required.\nUI:N - No victim action such as mounting media or opening a file is required; the attacker queues carddet_work (or uses in-flight CIR work) and coordinates with driver removal themselves.\nS:U - The use-after-free corrupts the host kernel's via_crdr_mmc_host/mmc_host heap object within the same security authority; it is not a VM escape, IOMMU/DMA isolation bypass, or sandbox breakout.\nC:H - via_sdc_card_detect() recovers the freed via_crdr_mmc_host via container_of() and dereferences its MMIO bases, lock, and mrq; this kernel heap UAF enables arbitrary read via slab reuse.\nI:H - The dangling worker performs MMIO writes (DMA soft-reset, via_reset_pcictrl), may queue finish_bh_work, and can re-enable PCIINTCTRL after free_irq, yielding heap-spray write and control-flow hijack primitives.\nA:H - Use-after-free of sdhost after iounmap and devm mmc_free_host causes a kernel oops or panic even when not fully exploited, so availability impact is High."}]}],"providerMetadata":{"shortName":"Linux","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateUpdated":"2026-10-30T12:31:41.816Z"},"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.31","versionEndExcluding":"5.10.273"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.31","versionEndExcluding":"5.15.224"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.31","versionEndExcluding":"6.1.191"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.31","versionEndExcluding":"6.6.160"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.31","versionEndExcluding":"6.12.112"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.31","versionEndExcluding":"6.18.50"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.31","versionEndExcluding":"7.2.4"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.31","versionEndExcluding":"7.3"}]}]}],"x_generator":{"engine":"bippy-1.2.0"}},"adp":[{"title":"CISA ADP Vulnrichment","metrics":[{"other":{"type":"ssvc","content":{"id":"CVE-2026-89441","role":"CISA Coordinator","options":[{"Exploitation":"none"},{"Automatable":"no"},{"Technical Impact":"total"}],"version":"2.0.3","timestamp":"2026-10-16T19:22:13.294951Z"}}}],"providerMetadata":{"shortName":"CISA-ADP","orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","dateUpdated":"2026-10-16T19:26:38.639Z"}}]}}}