[ovs-dev] [PATCH] netdev-vport: Fix compilation warning

Roi Dayan roid at nvidia.com
Thu Nov 18 08:12:45 UTC 2021



On 2021-11-18 9:59 AM, Roi Dayan wrote:
> 
> 
> On 2021-11-17 5:45 PM, Kevin Traynor wrote:
>> On 17/11/2021 14:44, Eelco Chaudron wrote:
>>>
>>>
>>> On 17 Nov 2021, at 14:00, Roi Dayan via dev wrote:
>>>
>>>> On 2021-11-17 2:51 PM, Roi Dayan wrote:
>>>>>
>>>>>
>>>>> On 2021-11-17 2:42 PM, Roi Dayan wrote:
>>>>>>
>>>>>>
>>>>>> On 2021-11-17 2:23 PM, Roi Dayan wrote:
>>>>>>>
>>>>>>>
>>>>>>> On 2021-11-17 2:17 PM, David Marchand wrote:
>>>>>>>> On Wed, Nov 17, 2021 at 1:12 PM Roi Dayan via dev
>>>>>>>> <ovs-dev at openvswitch.org> wrote:
>>>>>>>>>
>>>>>>>>> port is declared as uint16 so use %hu specifier instead of %d.
>>>>>>>>>
>>>>>>>>> lib/netdev-vport.c:460:44: error: '%s' directive output may be 
>>>>>>>>> truncated writing up to 4 bytes into a region of size between 1 
>>>>>>>>> and 10 [-Werror=format-truncation=]
>>>>>>>>>         snprintf(namebuf, bufsize, "dst_port_%d%s",
>>>>>>>>>                                              ^~
>>>>>>>>
>>>>>>>> Out of curiosity, is it due to new checks from a recent compiler?
>>>>>>>
>>>>>>> do you mean if we updated the compiler? than no.
>>>>>>> it fails on powerpc machine.
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>> Fixes: 189de33f02b2 ("netdev-vport: reject concomitant 
>>>>>>>>> incompatible tunnels")
>>>>>>>>> Signed-off-by: Roi Dayan <roid at nvidia.com>
>>>>>>>>> Reviewed-by: Eli Britstein <elibr at nvidia.com>
>>>>>>>>> ---
>>>>>>>>>    lib/netdev-vport.c | 2 +-
>>>>>>>>>    1 file changed, 1 insertion(+), 1 deletion(-)
>>>>>>>>>
>>>>>>>>> diff --git a/lib/netdev-vport.c b/lib/netdev-vport.c
>>>>>>>>> index 499c0291c933..1c7f55757e9a 100644
>>>>>>>>> --- a/lib/netdev-vport.c
>>>>>>>>> +++ b/lib/netdev-vport.c
>>>>>>>>> @@ -457,7 +457,7 @@ static char *
>>>>>>>>>    vxlan_get_port_ext_gbp_str(uint16_t port, bool gbp,
>>>>>>>>>                               char namebuf[], size_t bufsize)
>>>>>>>>>    {
>>>>>>>>> -    snprintf(namebuf, bufsize, "dst_port_%d%s",
>>>>>>>>> +    snprintf(namebuf, bufsize, "dst_port_%hu%s",
>>>>>>>>>                 port, gbp ? "_gbp" : "");
>>>>>>>>
>>>>>>>> Format for uint16_t is PRIu16.
>>>>>>>
>>>>>>> tested PRIu16 and got the same error. isn't PRIu16 defined as "u" ?
>>>>>>>
>>>>>>
>>>>>> did some more tests.
>>>>>> the test machine is ppc64be.
>>>>>>
>>>>>> lib/netdev-vport.c:460:51: note: format string is defined here
>>>>>>        snprintf(namebuf, bufsize, "dst_port_%"PRIu16"%s",
>>>>>>                                                      ^~
>>>>>>
>>>>>> seems the compiler now complains on the string.
>>>>>> if i remove the string the compiler doesn't complain with either %d
>>>>>> or PRIu16.
>>>>>
>>>>> seems i got it wrong. the compiler identify the size passed is 20.
>>>>> %hu solved it by limiting the number and have room for the string 
>>>>> "_gbp".
>>>>> using PRIu16 is bigger than %hu allowing to pass the 20 chars size.
>>>>> i'll send a diff fix increasing the buf size to 24 and using PRIu16
>>>>> as should.
>>>>>
>>>>> thanks for the review.
>>>>>
>>>>>
>>>>
>>>> before submitting i'm trying to understand why the compiler suggests 
>>>> 24.
>>>> "dst_port_" is 9 and the port could be 2. then "_gbp" is 4. so 20
>>>> should be enough. someone has an idea?
>>>> I can reproduce the issue only on ppc64be.
>>>
>>> Don’t have a ppc64be compiler ready, but what is the size of an int 
>>> on that architecture?
>>> %d normally is an int, so if 32 bit the max value for the string 
>>> could be strlen(“-2147483648”).
>>>
>>
>> There is an INT_STRLEN() macro in 
>> https://github.com/openvswitch/ovs/blob/master/include/openvswitch/type-props.h which is used elsewhere in the code and might be useful here.
>>
> 
> thanks. I checked size for int, uint16 and char with this macro.
> 
> 2021-11-18T07:57:28Z|00020|dpif_netlink|INFO|XXX size uint16_t 6
> 2021-11-18T07:57:28Z|00021|dpif_netlink|INFO|XXX size int 12
> 2021-11-18T07:58:58Z|00047|dpif_netlink|INFO|XXX size char 3
> 

strlen seems to give expected result

dpif_netlink|INFO|XXX size strlen("-2147483648") 11


> 
>>> //Eelco
>>>
>>>
>>> _______________________________________________
>>> dev mailing list
>>> dev at openvswitch.org
>>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>>>
>>


More information about the dev mailing list