[dpdk-dev,v6,10/16] net/qede: solve broken strncpy

Message ID 152627404220.52758.3218252976578778714.stgit@localhost.localdomain (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Andy Green May 14, 2018, 5 a.m. UTC
  /home/agreen/projects/dpdk/drivers/net/qede/qede_main.c: In function
‘qed_slowpath_start’:
/home/agreen/projects/dpdk/drivers/net/qede/qede_main.c:307:3:
error: ‘strncpy’ output may be truncated copying 12 bytes from a
string of length 127 [-Werror=stringop-truncation]
   strncpy((char *)drv_version.name, (const char *)params->name,
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    MCP_DRV_VER_STR_SIZE - 4);
    ~~~~~~~~~~~~~~~~~~~~~~~~~

Signed-off-by: Andy Green <andy@warmcat.com>
Fixes: 86a2265e59d7 ("qede: add SRIOV support")
Cc: stable@dpdk.org
---
 drivers/net/qede/qede_main.c |    7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
  

Comments

Ferruh Yigit May 14, 2018, 8:20 p.m. UTC | #1
On 5/14/2018 6:00 AM, Andy Green wrote:
> /home/agreen/projects/dpdk/drivers/net/qede/qede_main.c: In function
> ‘qed_slowpath_start’:
> /home/agreen/projects/dpdk/drivers/net/qede/qede_main.c:307:3:
> error: ‘strncpy’ output may be truncated copying 12 bytes from a
> string of length 127 [-Werror=stringop-truncation]
>    strncpy((char *)drv_version.name, (const char *)params->name,
>    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>     MCP_DRV_VER_STR_SIZE - 4);
>     ~~~~~~~~~~~~~~~~~~~~~~~~~
> 
> Signed-off-by: Andy Green <andy@warmcat.com>
> Fixes: 86a2265e59d7 ("qede: add SRIOV support")
> Cc: stable@dpdk.org
> ---
>  drivers/net/qede/qede_main.c |    7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/qede/qede_main.c b/drivers/net/qede/qede_main.c
> index 2333ca073..fcfc32d0d 100644
> --- a/drivers/net/qede/qede_main.c
> +++ b/drivers/net/qede/qede_main.c
> @@ -9,6 +9,7 @@
>  #include <limits.h>
>  #include <time.h>
>  #include <rte_alarm.h>
> +#include <rte_string_fns.h>
>  
>  #include "qede_ethdev.h"
>  
> @@ -303,9 +304,9 @@ static int qed_slowpath_start(struct ecore_dev *edev,
>  		drv_version.version = (params->drv_major << 24) |
>  		    (params->drv_minor << 16) |
>  		    (params->drv_rev << 8) | (params->drv_eng);
> -		/* TBD: strlcpy() */
> -		strncpy((char *)drv_version.name, (const char *)params->name,
> -			MCP_DRV_VER_STR_SIZE - 4);
> +		strlcpy((char *)drv_version.name, (const char *)params->name,
> +			sizeof(drv_version.name));
> +		drv_version.name[sizeof(drv_version.name) - 1] = '\0';

Why set '\0'? doesn't strlcpy assures it?

>  		rc = ecore_mcp_send_drv_version(hwfn, hwfn->p_main_ptt,
>  						&drv_version);
>  		if (rc) {
>
  
Ferruh Yigit May 14, 2018, 9:14 p.m. UTC | #2
On 5/14/2018 9:20 PM, Ferruh Yigit wrote:
> On 5/14/2018 6:00 AM, Andy Green wrote:
>> /home/agreen/projects/dpdk/drivers/net/qede/qede_main.c: In function
>> ‘qed_slowpath_start’:
>> /home/agreen/projects/dpdk/drivers/net/qede/qede_main.c:307:3:
>> error: ‘strncpy’ output may be truncated copying 12 bytes from a
>> string of length 127 [-Werror=stringop-truncation]
>>    strncpy((char *)drv_version.name, (const char *)params->name,
>>    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>     MCP_DRV_VER_STR_SIZE - 4);
>>     ~~~~~~~~~~~~~~~~~~~~~~~~~
>>
>> Signed-off-by: Andy Green <andy@warmcat.com>
>> Fixes: 86a2265e59d7 ("qede: add SRIOV support")
>> Cc: stable@dpdk.org
>> ---
>>  drivers/net/qede/qede_main.c |    7 ++++---
>>  1 file changed, 4 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/net/qede/qede_main.c b/drivers/net/qede/qede_main.c
>> index 2333ca073..fcfc32d0d 100644
>> --- a/drivers/net/qede/qede_main.c
>> +++ b/drivers/net/qede/qede_main.c
>> @@ -9,6 +9,7 @@
>>  #include <limits.h>
>>  #include <time.h>
>>  #include <rte_alarm.h>
>> +#include <rte_string_fns.h>
>>  
>>  #include "qede_ethdev.h"
>>  
>> @@ -303,9 +304,9 @@ static int qed_slowpath_start(struct ecore_dev *edev,
>>  		drv_version.version = (params->drv_major << 24) |
>>  		    (params->drv_minor << 16) |
>>  		    (params->drv_rev << 8) | (params->drv_eng);
>> -		/* TBD: strlcpy() */
>> -		strncpy((char *)drv_version.name, (const char *)params->name,
>> -			MCP_DRV_VER_STR_SIZE - 4);
>> +		strlcpy((char *)drv_version.name, (const char *)params->name,
>> +			sizeof(drv_version.name));
>> +		drv_version.name[sizeof(drv_version.name) - 1] = '\0';
> 
> Why set '\0'? doesn't strlcpy assures it?

Will remove this line while applying, with the change:
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>

> 
>>  		rc = ecore_mcp_send_drv_version(hwfn, hwfn->p_main_ptt,
>>  						&drv_version);
>>  		if (rc) {
>>
>
  
Andy Green May 14, 2018, 11:04 p.m. UTC | #3
On 05/15/2018 05:14 AM, Ferruh Yigit wrote:
> On 5/14/2018 9:20 PM, Ferruh Yigit wrote:
>> On 5/14/2018 6:00 AM, Andy Green wrote:
>>> /home/agreen/projects/dpdk/drivers/net/qede/qede_main.c: In function
>>> ‘qed_slowpath_start’:
>>> /home/agreen/projects/dpdk/drivers/net/qede/qede_main.c:307:3:
>>> error: ‘strncpy’ output may be truncated copying 12 bytes from a
>>> string of length 127 [-Werror=stringop-truncation]
>>>     strncpy((char *)drv_version.name, (const char *)params->name,
>>>     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>>      MCP_DRV_VER_STR_SIZE - 4);
>>>      ~~~~~~~~~~~~~~~~~~~~~~~~~
>>>
>>> Signed-off-by: Andy Green <andy@warmcat.com>
>>> Fixes: 86a2265e59d7 ("qede: add SRIOV support")
>>> Cc: stable@dpdk.org
>>> ---
>>>   drivers/net/qede/qede_main.c |    7 ++++---
>>>   1 file changed, 4 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/drivers/net/qede/qede_main.c b/drivers/net/qede/qede_main.c
>>> index 2333ca073..fcfc32d0d 100644
>>> --- a/drivers/net/qede/qede_main.c
>>> +++ b/drivers/net/qede/qede_main.c
>>> @@ -9,6 +9,7 @@
>>>   #include <limits.h>
>>>   #include <time.h>
>>>   #include <rte_alarm.h>
>>> +#include <rte_string_fns.h>
>>>   
>>>   #include "qede_ethdev.h"
>>>   
>>> @@ -303,9 +304,9 @@ static int qed_slowpath_start(struct ecore_dev *edev,
>>>   		drv_version.version = (params->drv_major << 24) |
>>>   		    (params->drv_minor << 16) |
>>>   		    (params->drv_rev << 8) | (params->drv_eng);
>>> -		/* TBD: strlcpy() */
>>> -		strncpy((char *)drv_version.name, (const char *)params->name,
>>> -			MCP_DRV_VER_STR_SIZE - 4);
>>> +		strlcpy((char *)drv_version.name, (const char *)params->name,
>>> +			sizeof(drv_version.name));
>>> +		drv_version.name[sizeof(drv_version.name) - 1] = '\0';
>>
>> Why set '\0'? doesn't strlcpy assures it?

Yeah... it's a leftover.

> Will remove this line while applying, with the change:
> Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>

Thanks.

-Andy

>>
>>>   		rc = ecore_mcp_send_drv_version(hwfn, hwfn->p_main_ptt,
>>>   						&drv_version);
>>>   		if (rc) {
>>>
>>
>
  

Patch

diff --git a/drivers/net/qede/qede_main.c b/drivers/net/qede/qede_main.c
index 2333ca073..fcfc32d0d 100644
--- a/drivers/net/qede/qede_main.c
+++ b/drivers/net/qede/qede_main.c
@@ -9,6 +9,7 @@ 
 #include <limits.h>
 #include <time.h>
 #include <rte_alarm.h>
+#include <rte_string_fns.h>
 
 #include "qede_ethdev.h"
 
@@ -303,9 +304,9 @@  static int qed_slowpath_start(struct ecore_dev *edev,
 		drv_version.version = (params->drv_major << 24) |
 		    (params->drv_minor << 16) |
 		    (params->drv_rev << 8) | (params->drv_eng);
-		/* TBD: strlcpy() */
-		strncpy((char *)drv_version.name, (const char *)params->name,
-			MCP_DRV_VER_STR_SIZE - 4);
+		strlcpy((char *)drv_version.name, (const char *)params->name,
+			sizeof(drv_version.name));
+		drv_version.name[sizeof(drv_version.name) - 1] = '\0';
 		rc = ecore_mcp_send_drv_version(hwfn, hwfn->p_main_ptt,
 						&drv_version);
 		if (rc) {