2019-03-18 17:42:16

by Gustavo A. R. Silva

[permalink] [raw]
Subject: [PATCH] scsi: lpfc_nvme: Fix wrong sizeof argument

sizeof() is currently using the wrong argument when used in a call to
memset(). Notice that wqe is a pointer to union lpfc_wqe128, not to
union lpfc_wqe.

Fix this by using union lpfc_wqe128 instead of lpfc_wqe as argument
of sizeof().

Addresses-Coverity-ID: 1443938 ("Wrong sizeof argument")
Fixes: 5fd1108517d9 ("scsi: lpfc: Streamline NVME Initiator WQE setup")
Cc: [email protected]
Signed-off-by: Gustavo A. R. Silva <[email protected]>
---
drivers/scsi/lpfc/lpfc_nvme.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/lpfc/lpfc_nvme.c b/drivers/scsi/lpfc/lpfc_nvme.c
index d16ca413110d..3dc0c85c7d50 100644
--- a/drivers/scsi/lpfc/lpfc_nvme.c
+++ b/drivers/scsi/lpfc/lpfc_nvme.c
@@ -1981,7 +1981,7 @@ lpfc_get_nvme_buf(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp,
/* Fill in word 3 / sgl_len during cmd submission */

/* Initialize WQE */
- memset(wqe, 0, sizeof(union lpfc_wqe));
+ memset(wqe, 0, sizeof(union lpfc_wqe128));

if (lpfc_ndlp_check_qdepth(phba, ndlp)) {
atomic_inc(&ndlp->cmd_pending);
--
2.21.0



2019-03-18 17:46:39

by James Bottomley

[permalink] [raw]
Subject: Re: [PATCH] scsi: lpfc_nvme: Fix wrong sizeof argument

On Mon, 2019-03-18 at 12:15 -0500, Gustavo A. R. Silva wrote:
> sizeof() is currently using the wrong argument when used in a call to
> memset(). Notice that wqe is a pointer to union lpfc_wqe128, not to
> union lpfc_wqe.
>
> Fix this by using union lpfc_wqe128 instead of lpfc_wqe as argument
> of sizeof().
>
> Addresses-Coverity-ID: 1443938 ("Wrong sizeof argument")
> Fixes: 5fd1108517d9 ("scsi: lpfc: Streamline NVME Initiator WQE
> setup")
> Cc: [email protected]
> Signed-off-by: Gustavo A. R. Silva <[email protected]>
> ---
> drivers/scsi/lpfc/lpfc_nvme.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/scsi/lpfc/lpfc_nvme.c
> b/drivers/scsi/lpfc/lpfc_nvme.c
> index d16ca413110d..3dc0c85c7d50 100644
> --- a/drivers/scsi/lpfc/lpfc_nvme.c
> +++ b/drivers/scsi/lpfc/lpfc_nvme.c
> @@ -1981,7 +1981,7 @@ lpfc_get_nvme_buf(struct lpfc_hba *phba, struct
> lpfc_nodelist *ndlp,
> /* Fill in word 3 / sgl_len during cmd submission */
>
> /* Initialize WQE */
> - memset(wqe, 0, sizeof(union lpfc_wqe));
> + memset(wqe, 0, sizeof(union lpfc_wqe128));

Actually the correct way to avoid potential problems like this is

memset(wqe, 0, sizeof(*wqe));

James


2019-03-18 18:03:47

by Gustavo A. R. Silva

[permalink] [raw]
Subject: Re: [PATCH] scsi: lpfc_nvme: Fix wrong sizeof argument



On 3/18/19 12:44 PM, James Bottomley wrote:
> On Mon, 2019-03-18 at 12:15 -0500, Gustavo A. R. Silva wrote:
>> sizeof() is currently using the wrong argument when used in a call to
>> memset(). Notice that wqe is a pointer to union lpfc_wqe128, not to
>> union lpfc_wqe.
>>
>> Fix this by using union lpfc_wqe128 instead of lpfc_wqe as argument
>> of sizeof().
>>
>> Addresses-Coverity-ID: 1443938 ("Wrong sizeof argument")
>> Fixes: 5fd1108517d9 ("scsi: lpfc: Streamline NVME Initiator WQE
>> setup")
>> Cc: [email protected]
>> Signed-off-by: Gustavo A. R. Silva <[email protected]>
>> ---
>> drivers/scsi/lpfc/lpfc_nvme.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/scsi/lpfc/lpfc_nvme.c
>> b/drivers/scsi/lpfc/lpfc_nvme.c
>> index d16ca413110d..3dc0c85c7d50 100644
>> --- a/drivers/scsi/lpfc/lpfc_nvme.c
>> +++ b/drivers/scsi/lpfc/lpfc_nvme.c
>> @@ -1981,7 +1981,7 @@ lpfc_get_nvme_buf(struct lpfc_hba *phba, struct
>> lpfc_nodelist *ndlp,
>> /* Fill in word 3 / sgl_len during cmd submission */
>>
>> /* Initialize WQE */
>> - memset(wqe, 0, sizeof(union lpfc_wqe));
>> + memset(wqe, 0, sizeof(union lpfc_wqe128));
>
> Actually the correct way to avoid potential problems like this is
>
> memset(wqe, 0, sizeof(*wqe));
>

You,re right.

There are plenty of this kind of issues in lpfc.

I'll write a new patch to address all of them at once.

Thanks
--
Gustavo


2019-03-18 21:59:05

by James Smart

[permalink] [raw]
Subject: Re: [PATCH] scsi: lpfc_nvme: Fix wrong sizeof argument



On 3/18/2019 10:44 AM, James Bottomley wrote:
> On Mon, 2019-03-18 at 12:15 -0500, Gustavo A. R. Silva wrote:
>> sizeof() is currently using the wrong argument when used in a call to
>> memset(). Notice that wqe is a pointer to union lpfc_wqe128, not to
>> union lpfc_wqe.
>>
>> Fix this by using union lpfc_wqe128 instead of lpfc_wqe as argument
>> of sizeof().
>>
>> Addresses-Coverity-ID: 1443938 ("Wrong sizeof argument")
>> Fixes: 5fd1108517d9 ("scsi: lpfc: Streamline NVME Initiator WQE
>> setup")
>> Cc: [email protected]
>> Signed-off-by: Gustavo A. R. Silva <[email protected]>
>> ---
>> drivers/scsi/lpfc/lpfc_nvme.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/scsi/lpfc/lpfc_nvme.c
>> b/drivers/scsi/lpfc/lpfc_nvme.c
>> index d16ca413110d..3dc0c85c7d50 100644
>> --- a/drivers/scsi/lpfc/lpfc_nvme.c
>> +++ b/drivers/scsi/lpfc/lpfc_nvme.c
>> @@ -1981,7 +1981,7 @@ lpfc_get_nvme_buf(struct lpfc_hba *phba, struct
>> lpfc_nodelist *ndlp,
>> /* Fill in word 3 / sgl_len during cmd submission */
>>
>> /* Initialize WQE */
>> - memset(wqe, 0, sizeof(union lpfc_wqe));
>> + memset(wqe, 0, sizeof(union lpfc_wqe128));
> Actually the correct way to avoid potential problems like this is
>
> memset(wqe, 0, sizeof(*wqe));
>
> James
>

Agree with James on style.   This one reference was a little
interesting. It purposely was something smaller than the whole structure
as the latter end of the structure ends up getting set later.  But not a
big deal to correct as indicated.

--james