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
>>>>> <[email protected]> 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 <[email protected]>
>>>>>> Reviewed-by: Eli Britstein <[email protected]>
>>>>>> ---
>>>>>>   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”).

//Eelco


_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to