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: Matthew R. Ochs <mrochs@linux.vnet.ibm.com> Signed-off-by: Manoj N. Kumar <manoj@linux.vnet.ibm.com> Reviewed-by: Brian King <brking@linux.vnet.ibm.com> Reviewed-by: Tomas Henzl <thenzl@redhat.com> Signed-off-by: James Bottomley <JBottomley@Odin.com>
This commit is contained in:
		
							parent
							
								
									8b5b1e871a
								
							
						
					
					
						commit
						d804621d02
					
				| @ -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; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user