{"id":"CVE-2026-99202","aliases":[],"title":"scsi: libsas: Fix SMP IO deadlock during HA resume","titleSource":"Linux","descriptionSource":"Linux","products":[{"vendor":"Linux","name":"Linux","platforms":[],"versions":[{"version":"9e24b47ef81d43b3fb1b14294f09991640c79fcc","status":"affected","lessThan":"c9fb89246d9922ac0a45d504adb03e0bb971310c","versionType":"git"},{"version":"3dbbbf656b850c9c8de05df6ad4a1dfc6ff02845","status":"affected","lessThan":"08b95ef36a64c3ae4490794bed3c35d0c3354e85","versionType":"git"},{"version":"3dbbbf656b850c9c8de05df6ad4a1dfc6ff02845","status":"affected","lessThan":"81e097a064b28b4a1f6ca1a8b433e659c1bd64c0","versionType":"git"},{"version":"09357f067122e2e28ec52e27013a1660a1571618","status":"affected","versionType":"git"},{"version":"e50a6523a603594a6d92cdecfe11997d639410a3","status":"affected","versionType":"git"},{"version":"c391b5899dd46485a5893696c12ae3e95a3a7325","status":"affected","versionType":"git"},{"version":"b9c44a14062093e9fc2d6bddc696cfceadb482d7","status":"affected","versionType":"git"},{"version":"6.18.44","status":"affected","lessThan":"6.18.59","versionType":"semver"},{"version":"6.1.183","status":"affected","lessThan":"6.2","versionType":"semver"},{"version":"6.6.151","status":"affected","lessThan":"6.7","versionType":"semver"},{"version":"6.12.103","status":"affected","lessThan":"6.13","versionType":"semver"},{"version":"7.1.8","status":"affected","lessThan":"7.2","versionType":"semver"}],"defaultStatus":"unaffected","source":"Linux","url":"https://www.cve.org/CVERecord?id=CVE-2026-99202"},{"vendor":"Linux","name":"Linux","platforms":[],"versions":[{"version":"7.2","status":"affected"},{"version":"0","status":"unaffected","lessThan":"7.2","versionType":"semver"},{"version":"6.18.59","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.2.13","status":"unaffected","lessThanOrEqual":"7.2.*","versionType":"semver"},{"version":"7.3","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"defaultStatus":"affected","source":"Linux","url":"https://www.cve.org/CVERecord?id=CVE-2026-99202"}],"remediation":[],"description":"In the Linux kernel, the following vulnerability has been resolved:\n\nscsi: libsas: Fix SMP IO deadlock during HA resume\n\nsmp_execute_task_sg() calls pm_runtime_get_sync() on the host before\nissuing an SMP command. When that command is itself issued from the HA\nresume path, the get_sync() deadlocks: it waits for the ongoing resume\n(the device is RPM_RESUMING), while the resume is blocked in\nsas_drain_work() waiting for that same SMP IO to complete.\n\nThe deadlock needs an expander-attached SATA disk. During\nsas_resume_ha() -> sas_drain_work(), DISCE_RESUME -> sas_resume_sata()\n-> ata_sas_port_resume() requests ATA_EH_RESET, and the hard reset for\nsuch a disk is done via SMP PHY CONTROL (sas_ata_hard_reset() ->\nsas_phy_reset() -> sas_smp_phy_control() ->\nsmp_execute_task_sg()). Direct-attached SATA resets through\nlldd_control_phy() and SSP devices use TMFs, so neither hits this.\n\nReplace the get_sync()/put_sync() pair with\npm_runtime_get_noresume()/pm_runtime_put(). smp_execute_task_sg() only\nneeds to hold off autosuspend while the SMP is in flight, and it must\nnot try to resume the host: a sync resume issued from the HA resume path\nitself is what deadlocks, and by the time sas_resume_ha() runs, hw_init\nhas already reinitialized the hardware, so the device is accessible\nwithout one.\n\nThe usage reference is still required. Discovery work normally runs\ninside an event worker's PM reference, taken at sas_notify_port_event()\nnotify time and held until the handler has flushed the disco\nqueue. sas_rediscover_ex_phy() however requeues DISCE_REVALIDATE_DOMAIN\nfrom within the revalidation worker itself, and flush_workqueue() does\nnot wait for work items queued during execution, so that chained\nrevalidation runs with no outer PM reference - without the\nget_noresume(), its SMP could race autosuspend.\n\nFor the BSG path, sas_smp_handler() is the only caller which may find\nthe host autosuspended: expander SMP requests do not go through any SCSI\ndevice request queue, so nothing else in that path holds the host\nawake. Resume it there with pm_runtime_resume_and_get() and check the\nresult.","severity":"unknown","score":null,"published":"2026-10-28T10:35:56.827Z","modified":"2026-10-28T10:35:56.827Z","withdrawn":false,"knownExploited":false,"affected":[],"references":["https://git.kernel.org/stable/c/c9fb89246d9922ac0a45d504adb03e0bb971310c","https://git.kernel.org/stable/c/08b95ef36a64c3ae4490794bed3c35d0c3354e85","https://git.kernel.org/stable/c/81e097a064b28b4a1f6ca1a8b433e659c1bd64c0"],"sources":[{"name":"CVE","id":"CVE-2026-99202","modified":"2026-10-28T10:35:56.827Z","url":"https://www.cve.org/CVERecord?id=CVE-2026-99202"}],"assessments":[],"sourceAffected":[],"kev":{"status":"not-listed","checkedAt":"2026-10-29T02:20:33.012Z"},"coverage":[{"source":"NVD","status":"not-checked"},{"source":"GHSA","status":"not-checked"},{"source":"EUVD","status":"not-checked"},{"source":"EPSS","status":"not-checked"}],"evidence":[]}