aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
authorRickard Strandqvist <rickard_strandqvist@spectrumdigital.se>2014-05-18 12:12:26 -0400
committerJiri Kosina <jkosina@suse.cz>2014-06-19 09:29:51 -0400
commiteaa015d2bfc85dcabb44184b6ef826361b993c4b (patch)
tree044ab3f914b30c090b29a00075f8ef21f012a30c /drivers/scsi
parent305af08c5398bab6c7029da53eb15d85a53eef0e (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')
-rw-r--r--drivers/scsi/mvsas/mv_sas.c24
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