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

Roi Dayan roid at nvidia.com
Wed Nov 17 13:00:21 UTC 2021



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.

>>
>>>>
>>>>>
>>>>>       return namebuf;
>>>>
>>>>


More information about the dev mailing list