Skip to content

Commit 83aabc1

Browse files
Jeff GarzikJames Bottomley
authored andcommitted
[SCSI] SCSI megaraid_sas: handle thrown errors
- handle clear_user() error - handle and properly unwind from sysfs errors thrown during mod init - adjust order of calls in megasas_exit() to precisely match registration order in megasas_init() Signed-off-by: Jeff Garzik <[email protected]> Updated for extra attribute and Signed-off-by: James Bottomley <[email protected]>
1 parent bb07662 commit 83aabc1

File tree

1 file changed

+30
-12
lines changed

1 file changed

+30
-12
lines changed

drivers/scsi/megaraid/megaraid_sas.c

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2864,7 +2864,8 @@ static int megasas_mgmt_compat_ioctl_fw(struct file *file, unsigned long arg)
28642864
int i;
28652865
int error = 0;
28662866

2867-
clear_user(ioc, sizeof(*ioc));
2867+
if (clear_user(ioc, sizeof(*ioc)))
2868+
return -EFAULT;
28682869

28692870
if (copy_in_user(&ioc->host_no, &cioc->host_no, sizeof(u16)) ||
28702871
copy_in_user(&ioc->sgl_off, &cioc->sgl_off, sizeof(u32)) ||
@@ -3010,28 +3011,45 @@ static int __init megasas_init(void)
30103011

30113012
if (rval) {
30123013
printk(KERN_DEBUG "megasas: PCI hotplug regisration failed \n");
3013-
unregister_chrdev(megasas_mgmt_majorno, "megaraid_sas_ioctl");
3014-
}
3015-
3016-
driver_create_file(&megasas_pci_driver.driver, &driver_attr_version);
3017-
driver_create_file(&megasas_pci_driver.driver,
3018-
&driver_attr_release_date);
3019-
driver_create_file(&megasas_pci_driver.driver,
3020-
&driver_attr_dbg_lvl);
3014+
goto err_pcidrv;
3015+
}
3016+
3017+
rval = driver_create_file(&megasas_pci_driver.driver,
3018+
&driver_attr_version);
3019+
if (rval)
3020+
goto err_dcf_attr_ver;
3021+
rval = driver_create_file(&megasas_pci_driver.driver,
3022+
&driver_attr_release_date);
3023+
if (rval)
3024+
goto err_dcf_rel_date;
3025+
rval = driver_create_file(&megasas_pci_driver.driver,
3026+
&driver_attr_dbg_lvl);
3027+
if (rval)
3028+
goto err_dcf_dbg_lvl;
30213029

30223030
return rval;
3031+
err_dcf_dbg_lvl:
3032+
driver_remove_file(&megasas_pci_driver.driver,
3033+
&driver_attr_release_date);
3034+
err_dcf_rel_date:
3035+
driver_remove_file(&megasas_pci_driver.driver, &driver_attr_version);
3036+
err_dcf_attr_ver:
3037+
pci_unregister_driver(&megasas_pci_driver);
3038+
err_pcidrv:
3039+
unregister_chrdev(megasas_mgmt_majorno, "megaraid_sas_ioctl");
3040+
return rval;
30233041
}
30243042

30253043
/**
30263044
* megasas_exit - Driver unload entry point
30273045
*/
30283046
static void __exit megasas_exit(void)
30293047
{
3030-
driver_remove_file(&megasas_pci_driver.driver, &driver_attr_version);
3031-
driver_remove_file(&megasas_pci_driver.driver,
3032-
&driver_attr_release_date);
30333048
driver_remove_file(&megasas_pci_driver.driver,
30343049
&driver_attr_dbg_lvl);
3050+
driver_remove_file(&megasas_pci_driver.driver,
3051+
&driver_attr_release_date);
3052+
driver_remove_file(&megasas_pci_driver.driver, &driver_attr_version);
30353053

30363054
pci_unregister_driver(&megasas_pci_driver);
30373055
unregister_chrdev(megasas_mgmt_majorno, "megaraid_sas_ioctl");

0 commit comments

Comments
 (0)