mirror of
https://github.com/torvalds/linux.git
synced 2026-09-24 06:24:02 +02:00
mmc: core: Cancel SDIO IRQ work before freeing host
A host controller that uses sdio_signal_irq() schedules host->sdio_irq_work from its interrupt handler. That work is only cancelled on the suspend path (mmc_sdio_suspend()), not on the remove/free path, so a worker armed just before the controller freed its IRQ can run after mmc_host_classdev_release() has freed the host and dereference it through container_of(). Cancel host->sdio_irq_work in mmc_free_host(), like the existing host->detect drain added by commit1036f69e25("mmc: core: Cancel delayed work before releasing host"). This issue was found by an in-house static analysis tool. Fixes:682696605c("mmc: sdio: Add API to manage SDIO IRQs from a workqueue") Cc: stable@vger.kernel.org Assisted-by: Codex:gpt-5.6 Signed-off-by: Fan Wu <fanwu01@zju.edu.cn> Signed-off-by: Ulf Hansson <ulfh@kernel.org>
This commit is contained in:
parent
90af7fde08
commit
6feadbecda
|
|
@ -698,6 +698,7 @@ EXPORT_SYMBOL(mmc_remove_host);
|
|||
void mmc_free_host(struct mmc_host *host)
|
||||
{
|
||||
cancel_delayed_work_sync(&host->detect);
|
||||
cancel_work_sync(&host->sdio_irq_work);
|
||||
mmc_pwrseq_free(host);
|
||||
put_device(&host->class_dev);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user