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

[PATCH] hostap: Fix memory leak on PCI probe error path

The Coverity checker (CID: 659, 660) spotted this resource leak on
PCI probe error path. Free private data structure if pci_enable_device()
fails.

Signed-off-by: Jouni Malinen <jkmaline@cc.hut.fi>
Signed-off-by: John W. Linville <linville@tuxdriver.com>

authored by

Jouni Malinen and committed by
John W. Linville
93201999 4f7ecdf0

+8 -5
+3 -1
drivers/net/wireless/hostap/hostap_pci.c
··· 307 307 memset(hw_priv, 0, sizeof(*hw_priv)); 308 308 309 309 if (pci_enable_device(pdev)) 310 - return -EIO; 310 + goto err_out_free; 311 311 312 312 phymem = pci_resource_start(pdev, 0); 313 313 ··· 368 368 err_out_disable: 369 369 pci_disable_device(pdev); 370 370 prism2_free_local_data(dev); 371 + 372 + err_out_free: 371 373 kfree(hw_priv); 372 374 373 375 return -ENODEV;
+5 -4
drivers/net/wireless/hostap/hostap_plx.c
··· 452 452 memset(hw_priv, 0, sizeof(*hw_priv)); 453 453 454 454 if (pci_enable_device(pdev)) 455 - return -EIO; 455 + goto err_out_free; 456 456 457 457 /* National Datacomm NCP130 based on TMD7160, not PLX9052. */ 458 458 tmd7160 = (pdev->vendor == 0x15e8) && (pdev->device == 0x0131); ··· 567 567 return hostap_hw_ready(dev); 568 568 569 569 fail: 570 - prism2_free_local_data(dev); 571 - kfree(hw_priv); 572 - 573 570 if (irq_registered && dev) 574 571 free_irq(dev->irq, dev); 575 572 ··· 574 577 iounmap(attr_mem); 575 578 576 579 pci_disable_device(pdev); 580 + prism2_free_local_data(dev); 581 + 582 + err_out_free: 583 + kfree(hw_priv); 577 584 578 585 return -ENODEV; 579 586 }