Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d804621d authored by Matthew R. Ochs's avatar Matthew R. Ochs Committed by James Bottomley
Browse files

cxlflash: Fix to prevent workq from accessing freed memory



The workq can process work in parallel with a remove event, leading
to a condition where the workq handler can access freed memory.

To remedy, the workq should be terminated prior to freeing memory. Move
the termination call earlier in remove and use cancel_work_sync() instead
of flush_work() as there is not a need to process any scheduled work when
shutting down.

Signed-off-by: default avatarMatthew R. Ochs <mrochs@linux.vnet.ibm.com>
Signed-off-by: default avatarManoj N. Kumar <manoj@linux.vnet.ibm.com>
Reviewed-by: default avatarBrian King <brking@linux.vnet.ibm.com>
Reviewed-by: default avatarTomas Henzl <thenzl@redhat.com>
Signed-off-by: default avatarJames Bottomley <JBottomley@Odin.com>
parent 8b5b1e87
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -736,11 +736,11 @@ static void cxlflash_remove(struct pci_dev *pdev)
		/* Fall through */
	case INIT_STATE_AFU:
		term_afu(cfg);
		cancel_work_sync(&cfg->work_q);
	case INIT_STATE_PCI:
		pci_release_regions(cfg->dev);
		pci_disable_device(pdev);
	case INIT_STATE_NONE:
		flush_work(&cfg->work_q);
		free_mem(cfg);
		scsi_host_put(cfg->host);
		break;