Skip to contentSkip to conversation

mpt3sas: cut and paste bug storing trigger mpi

PATCH Superseded Dan Carpenter 3 participants 5 messages Dec 7, 2012 – Dec 11, 2012

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 mpt3sas: cut and paste bug storing trigger mpi

ioc->diag_trigger_mpi is an SL_WH_MPI_TRIGGERS_T struct.

There is a cut and paste error here and SL_WH_EVENT_TRIGGERS_T is used instead of SL_WH_MPI_TRIGGERS_T. Since the SL_WH_EVENT_TRIGGERS_T is smaller than SL_WH_MPI_TRIGGERS_T, it means we only clear part of the buffer.

---
Only needed in linux-next.

This is a static analysis patch. Even though I'm pretty sure it's correct, I'm not able to test it.

drivers/scsi/mpt3sas/mpt3sas_ctl.c +1 -1
index 8af944d..3e35e64 100644
@@ -3136,7 +3136,7 @@ _ctl_diag_trigger_mpi_store(struct device *cdev,
 	spin_lock_irqsave(&ioc->diag_trigger_lock, flags);
 	sz = min(sizeof(struct SL_WH_MPI_TRIGGERS_T), count);
 	memset(&ioc->diag_trigger_mpi, 0,
-	    sizeof(struct SL_WH_EVENT_TRIGGERS_T));
+	    sizeof(struct SL_WH_MPI_TRIGGERS_T));
 	memcpy(&ioc->diag_trigger_mpi, buf, sz);
 	if (ioc->diag_trigger_mpi.ValidEntries > NUM_VALID_ENTRIES)
 		ioc->diag_trigger_mpi.ValidEntries = NUM_VALID_ENTRIES;
#1 lore raw
Quoted 29 lines

ioc->diag_trigger_mpi is an SL_WH_MPI_TRIGGERS_T struct.

There is a cut and paste error here and SL_WH_EVENT_TRIGGERS_T is used
instead of SL_WH_MPI_TRIGGERS_T. Since the SL_WH_EVENT_TRIGGERS_T is smaller than SL_WH_MPI_TRIGGERS_T, it means we only clear part of the buffer.

---
Only needed in linux-next.

This is a static analysis patch. Even though I'm pretty sure it's correct, I'm not able to test it.

drivers/scsi/mpt3sas/mpt3sas_ctl.c +1 -1
index 8af944d..3e35e64 100644
@@ -3136,7 +3136,7 @@ _ctl_diag_trigger_mpi_store(struct device 
 *cdev,
 	spin_lock_irqsave(&ioc->diag_trigger_lock, flags);
 	sz = min(sizeof(struct SL_WH_MPI_TRIGGERS_T), count);
 	memset(&ioc->diag_trigger_mpi, 0,
-	    sizeof(struct SL_WH_EVENT_TRIGGERS_T));
+	    sizeof(struct SL_WH_MPI_TRIGGERS_T));
 	memcpy(&ioc->diag_trigger_mpi, buf, sz);
 	if (ioc->diag_trigger_mpi.ValidEntries > NUM_VALID_ENTRIES)
Quoted 1 line

ioc->diag_trigger_mpi.ValidEntries = NUM_VALID_ENTRIES;

Then just use sizeof(ioc->diag_trigger_mpi), then it's irrelevant how that type is ever called.

Eike

#2 lore raw

PATCH v2 1/1 mpt3sas: cut and paste bug storing trigger mpi

ioc->diag_trigger_mpi is an SL_WH_MPI_TRIGGERS_T struct.

There is a cut and paste error here and SL_WH_EVENT_TRIGGERS_T is used instead of SL_WH_MPI_TRIGGERS_T. Since the SL_WH_EVENT_TRIGGERS_T is smaller than SL_WH_MPI_TRIGGERS_T, it means we only clear part of the buffer.

I've changed it to use sizeof(ioc->diag_trigger_mpi) which is a bit simpler.

---
v2: Style tweak.

Only needed in linux-next.

This is a static analysis patch. Even though I'm pretty sure it's correct, I'm not able to test it.

drivers/scsi/mpt3sas/mpt3sas_ctl.c +1 -1
index 8af944d..3e35e64 100644
@@ -3136,7 +3136,7 @@ _ctl_diag_trigger_mpi_store(struct device *cdev,
 	spin_lock_irqsave(&ioc->diag_trigger_lock, flags);
 	sz = min(sizeof(struct SL_WH_MPI_TRIGGERS_T), count);
 	memset(&ioc->diag_trigger_mpi, 0,
-	    sizeof(struct SL_WH_EVENT_TRIGGERS_T));
+	    sizeof(ioc->diag_trigger_mpi));
 	memcpy(&ioc->diag_trigger_mpi, buf, sz);
 	if (ioc->diag_trigger_mpi.ValidEntries > NUM_VALID_ENTRIES)
 		ioc->diag_trigger_mpi.ValidEntries = NUM_VALID_ENTRIES;
#3 lore raw
In reply to Rolf Eike Beer
Quoted 10 lines · Rolf Eike Beer
Quoted 6 lines
	memset(&ioc->diag_trigger_mpi, 0,
drivers/scsi/mpt3sas/mpt3sas_ctl.c +1 -1
-	    sizeof(struct SL_WH_EVENT_TRIGGERS_T));
+	    sizeof(struct SL_WH_MPI_TRIGGERS_T));
	memcpy(&ioc->diag_trigger_mpi, buf, sz);
	if (ioc->diag_trigger_mpi.ValidEntries > NUM_VALID_ENTRIES)
		ioc->diag_trigger_mpi.ValidEntries = NUM_VALID_ENTRIES;

Then just use sizeof(ioc->diag_trigger_mpi), then it's irrelevant how that type is ever called.

Yeah, that's the way I would have prefered to write this as well. It took me a while to verify that the intent here was not to clear only part of the struct. Using sizeof(variable_name) instead of sizeof(type) is more readable.

But then you get into the thing where the line before uses sizeof(type)...

Oh well, I've sent both styles and the maintainer can choose. :)

regards,
dan carpenter

#4 lore raw
In reply to Dan Carpenter

James,

This patch seem to be fine. Please consider this patch as Acked-by: "Sreekanth Reddy" <[email protected]>

Regards,
Sreekanth.

-----Original Message-----
From: Dan Carpenter [mailto:[email protected]]
Sent: Friday, December 07, 2012 11:58 AM
To: Nandigama, Nagalakshmi
Cc: Reddy, Sreekanth; Support; James E.J. Bottomley; DL-MPT Fusion Linux; [email protected]; [email protected]; [email protected]
Subject: [patch] [SCSI] mpt3sas: cut and paste bug storing trigger mpi

ioc->diag_trigger_mpi is an SL_WH_MPI_TRIGGERS_T struct.

There is a cut and paste error here and SL_WH_EVENT_TRIGGERS_T is used instead of SL_WH_MPI_TRIGGERS_T. Since the SL_WH_EVENT_TRIGGERS_T is smaller than SL_WH_MPI_TRIGGERS_T, it means we only clear part of the buffer.

---
Only needed in linux-next.

This is a static analysis patch. Even though I'm pretty sure it's correct, I'm not able to test it.

drivers/scsi/mpt3sas/mpt3sas_ctl.c +1 -1
index 8af944d..3e35e64 100644
@@ -3136,7 +3136,7 @@ _ctl_diag_trigger_mpi_store(struct device *cdev,
 	spin_lock_irqsave(&ioc->diag_trigger_lock, flags);
 	sz = min(sizeof(struct SL_WH_MPI_TRIGGERS_T), count);
 	memset(&ioc->diag_trigger_mpi, 0,
-	    sizeof(struct SL_WH_EVENT_TRIGGERS_T));
+	    sizeof(struct SL_WH_MPI_TRIGGERS_T));
 	memcpy(&ioc->diag_trigger_mpi, buf, sz);
 	if (ioc->diag_trigger_mpi.ValidEntries > NUM_VALID_ENTRIES)
 		ioc->diag_trigger_mpi.ValidEntries = NUM_VALID_ENTRIES;