[dpdk-dev] [PATCH 2/2] ethdev: use strlcpy instead of snprintf on initialization

Stephen Hemminger stephen at networkplumber.org
Fri Mar 1 19:42:21 CET 2019


On Fri, 1 Mar 2019 10:48:58 +0300
Andrew Rybchenko <arybchenko at solarflare.com> wrote:

> On 3/1/19 1:47 AM, Stephen Hemminger wrote:
> > Don't need to use snprintf for simple name copy.
> >
> > Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>
> > ---
> >   lib/librte_ethdev/rte_ethdev.c | 2 +-
> >   1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
> > index 95889ed206db..8bd54dcf58c1 100644
> > --- a/lib/librte_ethdev/rte_ethdev.c
> > +++ b/lib/librte_ethdev/rte_ethdev.c
> > @@ -459,7 +459,7 @@ rte_eth_dev_allocate(const char *name)
> >   	}
> >   
> >   	eth_dev = eth_dev_get(port_id);
> > -	snprintf(eth_dev->data->name, sizeof(eth_dev->data->name), "%s", name);
> > +	strlcpy(eth_dev->data->name, name, RTE_ETH_NAME_MAX_LEN);  
> 
> Why is sizeof() substituted with RTE_ETH_NAME_MAX_LEN?

Same thing, I just wanted to make the length obvious to the reader.

> I thought that sizeof() is the first choice in such cases since it is a 
> bit more
> safer vs possible changes in the code.
> 
> BTW, wouldn't it be more friendly to check name length on entry and
> reject if it is too long? (and same for rte_eth_dev_create())

It is impossible for name to long since since both structures are the same.

> I agree that strlcpy() should be used anyway.
> 
> >   	eth_dev->data->port_id = port_id;
> >   	eth_dev->data->mtu = ETHER_MTU;
> >     
> 



More information about the dev mailing list