{"id":"CVE-2026-99202","title":"scsi: libsas: Fix SMP IO deadlock during HA resume","summary":"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 it…","severity":"none","vendor":"Linux","product":"Linux","affected":["Linux >= 9e24b47ef81d43b3fb1b14294f09991640c79fcc < c9fb89246d9922ac0a45d504adb03e0bb971310c","Linux >= 3dbbbf656b850c9c8de05df6ad4a1dfc6ff02845 < 08b95ef36a64c3ae4490794bed3c35d0c3354e85","Linux >= 3dbbbf656b850c9c8de05df6ad4a1dfc6ff02845 < 81e097a064b28b4a1f6ca1a8b433e659c1bd64c0","Linux 09357f067122e2e28ec52e27013a1660a1571618","Linux e50a6523a603594a6d92cdecfe11997d639410a3","Linux c391b5899dd46485a5893696c12ae3e95a3a7325","Linux b9c44a14062093e9fc2d6bddc696cfceadb482d7","Linux >= 6.18.44 < 6.18.59","Linux >= 6.1.183 < 6.2","Linux >= 6.6.151 < 6.7","Linux >= 6.12.103 < 6.13","Linux >= 7.1.8 < 7.2","Linux 7.2"],"published":"2026-10-28","updated":"2026-10-28","sourceUpdated":"2026-10-28T10:35:56.827Z","source":"CVEORG","sourceUrl":"https://www.cve.org/CVERecord?id=CVE-2026-99202","references":[{"url":"https://git.kernel.org/stable/c/c9fb89246d9922ac0a45d504adb03e0bb971310c"},{"url":"https://git.kernel.org/stable/c/08b95ef36a64c3ae4490794bed3c35d0c3354e85"},{"url":"https://git.kernel.org/stable/c/81e097a064b28b4a1f6ca1a8b433e659c1bd64c0"}],"tags":["cve.org"],"ingestedAt":"2026-10-28T11:09:40.362Z","slug":"CVE-2026-99202","body":"## Overview\n\nIn 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.\n\n## Affected\n\n- `Linux >= 9e24b47ef81d43b3fb1b14294f09991640c79fcc < c9fb89246d9922ac0a45d504adb03e0bb971310c`\n- `Linux >= 3dbbbf656b850c9c8de05df6ad4a1dfc6ff02845 < 08b95ef36a64c3ae4490794bed3c35d0c3354e85`\n- `Linux >= 3dbbbf656b850c9c8de05df6ad4a1dfc6ff02845 < 81e097a064b28b4a1f6ca1a8b433e659c1bd64c0`\n- `Linux 09357f067122e2e28ec52e27013a1660a1571618`\n- `Linux e50a6523a603594a6d92cdecfe11997d639410a3`\n- `Linux c391b5899dd46485a5893696c12ae3e95a3a7325`\n- `Linux b9c44a14062093e9fc2d6bddc696cfceadb482d7`\n- `Linux >= 6.18.44 < 6.18.59`\n- `Linux >= 6.1.183 < 6.2`\n- `Linux >= 6.6.151 < 6.7`\n- `Linux >= 6.12.103 < 6.13`\n- `Linux >= 7.1.8 < 7.2`\n- `Linux 7.2`\n\n## Remediation\n\nRefer to the linked advisories for vendor-supplied fixes and affected version ranges.","depth":"sunlit","depthScore":3,"depthScoreParts":{"impact":2.8,"likelihood":0,"exploitation":0,"ransomware":0},"changes":[]}