[media] coda: improve safety in coda_register_device()
authorDan Carpenter <dan.carpenter@oracle.com>
Thu, 8 Jan 2015 10:07:08 +0000 (07:07 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Tue, 27 Jan 2015 12:15:07 +0000 (10:15 -0200)
The "i" variable is used as an offset into both the dev->vfd[] and the
dev->devtype->vdevs[] arrays.  The second array is smaller so we should
use that as a limit instead of ARRAY_SIZE(dev->vfd).  Also the original
check was off by one.

We should use a format string as well in case the ->name has any funny
characters and also to stop static checkers from complaining.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/platform/coda/coda-common.c

index efed0b8029433dd70683fe0bb4e5e32fb1f25942..ea7a0dcf1530aac6f9e8ede4471f79d376d4f66f 100644 (file)
@@ -1844,10 +1844,11 @@ static int coda_register_device(struct coda_dev *dev, int i)
 {
        struct video_device *vfd = &dev->vfd[i];
 
-       if (i > ARRAY_SIZE(dev->vfd))
+       if (i >= dev->devtype->num_vdevs)
                return -EINVAL;
 
-       snprintf(vfd->name, sizeof(vfd->name), dev->devtype->vdevs[i]->name);
+       snprintf(vfd->name, sizeof(vfd->name), "%s",
+                dev->devtype->vdevs[i]->name);
        vfd->fops       = &coda_fops;
        vfd->ioctl_ops  = &coda_ioctl_ops;
        vfd->release    = video_device_release_empty,