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
