[PATCH] examples/cmdline: fix build error with gcc 12

Olivier Matz olivier.matz at 6wind.com
Fri Feb 10 12:26:14 CET 2023


Hi,

Sorry for the late reply.

On Thu, Jan 19, 2023 at 08:59:10AM +0000, Bruce Richardson wrote:
> On Wed, Jan 18, 2023 at 06:53:33PM +0000, Ferruh Yigit wrote:
> > On 1/18/2023 4:11 PM, Bruce Richardson wrote:
> > > When building the example without libbsd and using the DPDK-provided
> > > strlcpy function, a compiler warning is emitted by GCC 12 about the copy
> > > of the parsed string into the resulting object. This is because the
> > > source from cmdline library is 128 bytes and the destination buffer is
> > > 64-bytes.
> > > 
> > > commands.c: In function 'cmd_obj_add_parsed':
> > > .../__BUILDS/build-x86-generic/install/usr/local/include/rte_string_fns.h:61:24: warning: '%s' directive output may be truncated writing up to 127 bytes into a region of size 64 [-Wformat-truncation=]
> > >    61 |         return (size_t)snprintf(dst, size, "%s", src);
> > >       |                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > > In file included from /usr/include/stdio.h:894,
> > >                  from commands.c:7:
> > > /usr/include/x86_64-linux-gnu/bits/stdio2.h:71:10: note: '__builtin_snprintf' output between 1 and 128 bytes into a destination of size 64
> > > 
> > > Multiple options are possible to fix this, but the one taken in this
> > > patch is to ensure truncation never occurs by setting the destination
> > > buffer size to be the same as that used by the cmdline library.
> > > 
> > > Fixes: af75078fece3 ("first public release")
> > > Cc: stable at dpdk.org
> > > 
> > > Signed-off-by: Bruce Richardson <bruce.richardson at intel.com>
> > > ---
> > >  examples/cmdline/parse_obj_list.h | 3 ++-
> > >  1 file changed, 2 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/examples/cmdline/parse_obj_list.h b/examples/cmdline/parse_obj_list.h
> > > index 6516d3e2c2..1223ac1e8b 100644
> > > --- a/examples/cmdline/parse_obj_list.h
> > > +++ b/examples/cmdline/parse_obj_list.h
> > > @@ -12,8 +12,9 @@
> > >  
> > >  #include <sys/queue.h>
> > >  #include <cmdline_parse.h>
> > > +#include <cmdline_parse_string.h>
> > >  
> > > -#define OBJ_NAME_LEN_MAX 64
> > > +#define OBJ_NAME_LEN_MAX sizeof(cmdline_fixed_string_t)
> > >  
> > >  struct object {
> > >  	SLIST_ENTRY(object) next;
> > 
> > I confirm it solves the build warning, but what about to get rid of
> > `OBJ_NAME_LEN_MAX` completely if the intentions is to make size same as
> > cmdline library array:
> > 
> Sure.
> Another potential fix is just to cast-away [(void)] the return value from
> strlcpy and allow truncation.
> 
> Olivier, as maintainer, what is your preferred fix here?

I think you solution is good enough, given it's a dummy example.

Acked-by: Olivier Matz <olivier.matz at 6wind.com>

Ferruh's comment about getting rid of OBJ_NAME_LEN_MAX is right, however
I think in this case we should allocate the string and store a pointer
to this string instead of having a size limited buffer.


Olivier


More information about the stable mailing list