On Thu, Feb 27, 2014 at 11:44:38PM +0000, Russell King - ARM Linux wrote:
> On Thu, Feb 27, 2014 at 02:54:43PM -0800, Greg KH wrote:
> > On Wed, Feb 26, 2014 at 08:53:41PM -0300, Fabio Estevam wrote:
> > > diff --git a/drivers/staging/imx-drm/imx-ldb.c 
> > > b/drivers/staging/imx-drm/imx-ldb.c
> > > index abf8517..daa54df 100644
> > > --- a/drivers/staging/imx-drm/imx-ldb.c
> > > +++ b/drivers/staging/imx-drm/imx-ldb.c
> > > @@ -334,12 +334,12 @@ static int imx_ldb_get_clk(struct imx_ldb *ldb, int 
> > > chno)
> > >  {
> > >   char clkname[16];
> > >  
> > > - sprintf(clkname, "di%d", chno);
> > > + snprintf(clkname, sizeof(clkname), "di%d", chno);
> > 
> > Are you sure this can not overflow as well?  Strings in C are nasty...
> 
> Can you indicate how this would overflow?
> 
>  * snprintf - Format a string and place it in a buffer
> ...
>  *
>  * The return value is the number of characters which would be
>  * generated for the given input, excluding the trailing null,
>  * as per ISO C99.  If the return is greater than or equal to
>  * @size, the resulting string is truncated.
> 
> Now, there's several layers of protection here.  The first obvious one
> is using snprintf() instead of sprintf() which wouldn't know the buffer
> size.
> 
> The second one is something that the static checker can't know, and
> that is for existing uses, chno is limited to zero or one:
> 
>                 ret = of_property_read_u32(child, "reg", &i);
>                 if (ret || i < 0 || i > 1)
>                         return -EINVAL;
> 

If you have the cross function database built then Smatch wouldn't have
complained.  But this driver is outside of my normal build so I didn't
have that.

Of course, my first impression was that this wasn't a real bug.  But
these things are easy to solve and people who don't use snprintf()
should be more careful about picking buffer sizes so I don't care about
harrassing people with false positives.  ;)

If the code were old and outside of staging then I wouldn't have
mentioned the warning.

regards,
dan carpenter

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to