Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

misc: alcor_pci: set NULL intfdata and clear pci master

alcor_pci doesn't set driver data to NULL and clear pci master when
probe fails. Doesn't clear pci master from remove interface. Clearing
pci master is necessary to disable bus mastering and prevent DMAs after
driver removal.

Fix alcor_pci_probe() to set driver data to NULL and clear pci master
from its error path. Fix alcor_pci_remove() to clear pci master.

Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
Link: https://lore.kernel.org/r/20220517203630.45232-1-skhan@linuxfoundation.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Shuah Khan and committed by
Greg Kroah-Hartman
8e04a7af 5621a0bc

+5 -1
+5 -1
drivers/misc/cardreader/alcor_pci.c
··· 317 317 ret = mfd_add_devices(&pdev->dev, priv->id, alcor_pci_cells, 318 318 ARRAY_SIZE(alcor_pci_cells), NULL, 0, NULL); 319 319 if (ret < 0) 320 - goto error_release_regions; 320 + goto error_clear_drvdata; 321 321 322 322 alcor_pci_aspm_ctrl(priv, 0); 323 323 324 324 return 0; 325 325 326 + error_clear_drvdata: 327 + pci_clear_master(pdev); 328 + pci_set_drvdata(pdev, NULL); 326 329 error_release_regions: 327 330 pci_release_regions(pdev); 328 331 error_free_ida: ··· 346 343 ida_free(&alcor_pci_idr, priv->id); 347 344 348 345 pci_release_regions(pdev); 346 + pci_clear_master(pdev); 349 347 pci_set_drvdata(pdev, NULL); 350 348 } 351 349