diff options
author | Jeff Garzik <jeff@garzik.org> | 2006-10-01 07:31:09 -0400 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2006-10-01 07:31:09 -0400 |
commit | de897881e474cae06cf06c830fcadc916c53ce64 (patch) | |
tree | 5138cedb1f9e7b97f9ac1bb321d28b4ce50f2cda /drivers/net | |
parent | b7a00ecd557859c4037b6465fdd6c9a49b1fa649 (diff) |
drivers/net/wireless/{airo,ipw2100}: fix error handling bugs
airo:
* fix oops, if !CONFIG_PROC_FS (create_proc_entry always returns NULL)
* handle pci_register_driver() failure. if it fails, we really do
want to exit, rather than (as a comment indicates) return success
because-we-are-a-library.
* #if 0 have_isa_dev variable, which is assigned a value but never used
ipw2100:
* handle sysfs_create_group() failure
* handle driver_create_file() failure
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/wireless/airo.c | 23 | ||||
-rw-r--r-- | drivers/net/wireless/ipw2100.c | 11 |
2 files changed, 27 insertions, 7 deletions
diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c index ba737c6cebec..39d09345027c 100644 --- a/drivers/net/wireless/airo.c +++ b/drivers/net/wireless/airo.c | |||
@@ -5659,25 +5659,40 @@ static int airo_pci_resume(struct pci_dev *pdev) | |||
5659 | 5659 | ||
5660 | static int __init airo_init_module( void ) | 5660 | static int __init airo_init_module( void ) |
5661 | { | 5661 | { |
5662 | int i, have_isa_dev = 0; | 5662 | int i; |
5663 | #if 0 | ||
5664 | int have_isa_dev = 0; | ||
5665 | #endif | ||
5663 | 5666 | ||
5664 | airo_entry = create_proc_entry("aironet", | 5667 | airo_entry = create_proc_entry("aironet", |
5665 | S_IFDIR | airo_perm, | 5668 | S_IFDIR | airo_perm, |
5666 | proc_root_driver); | 5669 | proc_root_driver); |
5667 | airo_entry->uid = proc_uid; | 5670 | |
5668 | airo_entry->gid = proc_gid; | 5671 | if (airo_entry) { |
5672 | airo_entry->uid = proc_uid; | ||
5673 | airo_entry->gid = proc_gid; | ||
5674 | } | ||
5669 | 5675 | ||
5670 | for( i = 0; i < 4 && io[i] && irq[i]; i++ ) { | 5676 | for( i = 0; i < 4 && io[i] && irq[i]; i++ ) { |
5671 | airo_print_info("", "Trying to configure ISA adapter at irq=%d " | 5677 | airo_print_info("", "Trying to configure ISA adapter at irq=%d " |
5672 | "io=0x%x", irq[i], io[i] ); | 5678 | "io=0x%x", irq[i], io[i] ); |
5673 | if (init_airo_card( irq[i], io[i], 0, NULL )) | 5679 | if (init_airo_card( irq[i], io[i], 0, NULL )) |
5680 | #if 0 | ||
5674 | have_isa_dev = 1; | 5681 | have_isa_dev = 1; |
5682 | #else | ||
5683 | /* do nothing */ ; | ||
5684 | #endif | ||
5675 | } | 5685 | } |
5676 | 5686 | ||
5677 | #ifdef CONFIG_PCI | 5687 | #ifdef CONFIG_PCI |
5678 | airo_print_info("", "Probing for PCI adapters"); | 5688 | airo_print_info("", "Probing for PCI adapters"); |
5679 | pci_register_driver(&airo_driver); | 5689 | i = pci_register_driver(&airo_driver); |
5680 | airo_print_info("", "Finished probing for PCI adapters"); | 5690 | airo_print_info("", "Finished probing for PCI adapters"); |
5691 | |||
5692 | if (i) { | ||
5693 | remove_proc_entry("aironet", proc_root_driver); | ||
5694 | return i; | ||
5695 | } | ||
5681 | #endif | 5696 | #endif |
5682 | 5697 | ||
5683 | /* Always exit with success, as we are a library module | 5698 | /* Always exit with success, as we are a library module |
diff --git a/drivers/net/wireless/ipw2100.c b/drivers/net/wireless/ipw2100.c index 6c5add701a6f..8ec9b73bbdd4 100644 --- a/drivers/net/wireless/ipw2100.c +++ b/drivers/net/wireless/ipw2100.c | |||
@@ -6267,7 +6267,9 @@ static int ipw2100_pci_init_one(struct pci_dev *pci_dev, | |||
6267 | IPW_DEBUG_INFO("%s: Bound to %s\n", dev->name, pci_name(pci_dev)); | 6267 | IPW_DEBUG_INFO("%s: Bound to %s\n", dev->name, pci_name(pci_dev)); |
6268 | 6268 | ||
6269 | /* perform this after register_netdev so that dev->name is set */ | 6269 | /* perform this after register_netdev so that dev->name is set */ |
6270 | sysfs_create_group(&pci_dev->dev.kobj, &ipw2100_attribute_group); | 6270 | err = sysfs_create_group(&pci_dev->dev.kobj, &ipw2100_attribute_group); |
6271 | if (err) | ||
6272 | goto fail_unlock; | ||
6271 | 6273 | ||
6272 | /* If the RF Kill switch is disabled, go ahead and complete the | 6274 | /* If the RF Kill switch is disabled, go ahead and complete the |
6273 | * startup sequence */ | 6275 | * startup sequence */ |
@@ -6533,13 +6535,16 @@ static int __init ipw2100_init(void) | |||
6533 | printk(KERN_INFO DRV_NAME ": %s\n", DRV_COPYRIGHT); | 6535 | printk(KERN_INFO DRV_NAME ": %s\n", DRV_COPYRIGHT); |
6534 | 6536 | ||
6535 | ret = pci_register_driver(&ipw2100_pci_driver); | 6537 | ret = pci_register_driver(&ipw2100_pci_driver); |
6538 | if (ret) | ||
6539 | goto out; | ||
6536 | 6540 | ||
6537 | #ifdef CONFIG_IPW2100_DEBUG | 6541 | #ifdef CONFIG_IPW2100_DEBUG |
6538 | ipw2100_debug_level = debug; | 6542 | ipw2100_debug_level = debug; |
6539 | driver_create_file(&ipw2100_pci_driver.driver, | 6543 | ret = driver_create_file(&ipw2100_pci_driver.driver, |
6540 | &driver_attr_debug_level); | 6544 | &driver_attr_debug_level); |
6541 | #endif | 6545 | #endif |
6542 | 6546 | ||
6547 | out: | ||
6543 | return ret; | 6548 | return ret; |
6544 | } | 6549 | } |
6545 | 6550 | ||