diff options
author | Rickard Strandqvist <rickard_strandqvist@spectrumdigital.se> | 2014-05-18 12:12:26 -0400 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2014-06-19 09:29:51 -0400 |
commit | eaa015d2bfc85dcabb44184b6ef826361b993c4b (patch) | |
tree | 044ab3f914b30c090b29a00075f8ef21f012a30c /drivers/scsi/mvsas/mv_sas.c | |
parent | 305af08c5398bab6c7029da53eb15d85a53eef0e (diff) |
scsi: mvsas: mv_sas.c: Fix for possible null pointer dereference
There is otherwise a risk of a possible null pointer dereference.
Was largely found by using a static code analysis program called cppcheck.
Signed-off-by: Rickard Strandqvist <rickard_strandqvist@spectrumdigital.se>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'drivers/scsi/mvsas/mv_sas.c')
-rw-r--r-- | drivers/scsi/mvsas/mv_sas.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/drivers/scsi/mvsas/mv_sas.c b/drivers/scsi/mvsas/mv_sas.c index 6c1f223a8e1d..ac52f7c99513 100644 --- a/drivers/scsi/mvsas/mv_sas.c +++ b/drivers/scsi/mvsas/mv_sas.c | |||
@@ -1344,19 +1344,23 @@ void mvs_dev_gone_notify(struct domain_device *dev) | |||
1344 | { | 1344 | { |
1345 | unsigned long flags = 0; | 1345 | unsigned long flags = 0; |
1346 | struct mvs_device *mvi_dev = dev->lldd_dev; | 1346 | struct mvs_device *mvi_dev = dev->lldd_dev; |
1347 | struct mvs_info *mvi = mvi_dev->mvi_info; | 1347 | struct mvs_info *mvi; |
1348 | |||
1349 | spin_lock_irqsave(&mvi->lock, flags); | ||
1350 | 1348 | ||
1351 | if (mvi_dev) { | 1349 | if (!mvi_dev) { |
1352 | mv_dprintk("found dev[%d:%x] is gone.\n", | ||
1353 | mvi_dev->device_id, mvi_dev->dev_type); | ||
1354 | mvs_release_task(mvi, dev); | ||
1355 | mvs_free_reg_set(mvi, mvi_dev); | ||
1356 | mvs_free_dev(mvi_dev); | ||
1357 | } else { | ||
1358 | mv_dprintk("found dev has gone.\n"); | 1350 | mv_dprintk("found dev has gone.\n"); |
1351 | return; | ||
1359 | } | 1352 | } |
1353 | |||
1354 | mvi = mvi_dev->mvi_info; | ||
1355 | |||
1356 | spin_lock_irqsave(&mvi->lock, flags); | ||
1357 | |||
1358 | mv_dprintk("found dev[%d:%x] is gone.\n", | ||
1359 | mvi_dev->device_id, mvi_dev->dev_type); | ||
1360 | mvs_release_task(mvi, dev); | ||
1361 | mvs_free_reg_set(mvi, mvi_dev); | ||
1362 | mvs_free_dev(mvi_dev); | ||
1363 | |||
1360 | dev->lldd_dev = NULL; | 1364 | dev->lldd_dev = NULL; |
1361 | mvi_dev->sas_device = NULL; | 1365 | mvi_dev->sas_device = NULL; |
1362 | 1366 | ||