Hi Anoob,

> > > > @@ -542,8 +543,8 @@ rte_cryptodev_get_dev_id(const char *name)
> > > >                 return -1;
> > > >
> > > >         for (i = 0; i < cryptodev_globals.nb_devs; i++)
> > > > -               if ((strcmp(cryptodev_globals.devs[i].data->name, name)
> > > > -                               == 0) &&
> > > > +               if ((strncmp(cryptodev_globals.devs[i].data->name, name,
> > > > +                               RTE_CRYPTODEV_NAME_MAX_LEN) == 0)
> > &&
> > [Fiona] Is this safe? The const passed to this may not be the full length of
> > RTE_CRYPTODEV_NAME_MAX_LEN. Does this prototype need to specify
> > that a full length const filled with trailing zeros must be passed in? And 
> > if so is
> > this an ABI breakage?
> >
> 
> [Anoob] strcmp itself is not safe when we have buffers which are not NULL 
> terminated. Strncmp will make
> sure the check won't exceed RTE_CRYPTODEV_NAME_MAX_LEN.
> 
> From man page, "The strncmp() function is similar, except it only compares 
> the first (at most) n bytes of
> s1 and s2."
> 
> The main issue here is the usage of strncmp with strlen(driver_name), as in 
> the below cases. Strlen will
> return string length, which doesn't include \0. strcmp is good enough to fix 
> the issue. But usage of strcmp
> would assume that the const is filled with trailing zero. IMO, none of these 
> options are really safe. So
> please advise on what would be the best solution here. I'll revise the patch 
> accordingly.
[Fiona] I agree and think it is safest as you've coded it. However I'd suggest 
adding a comment on the relevant APIs saying that the string must be passed in 
in a buffer of size <use relevant #define> with trailing zeros.

Reply via email to