libv4l2: Fixed bugs result of prevent tool
authorSungchun Kang <sungchun.kang@samsung.com>
Thu, 28 Feb 2013 04:13:31 +0000 (13:13 +0900)
committerHuisung Kang <hs1218.kang@samsung.com>
Mon, 4 Mar 2013 23:03:52 +0000 (08:03 +0900)
Use snprintf instead of sprintf for avoiding risk of overflow.

Change-Id: If420efb9780e615c368400b2de0c05743ec3a5f6
Signed-off-by: Sungchun Kang <sungchun.kang@samsung.com>
libv4l2/exynos_mc.c
libv4l2/exynos_subdev.c
libv4l2/exynos_v4l2.c

index 8c5230c4442ea630b6da89f4e65102ce74c5db52..02e83032d44db6dec882c72c8396e34d79325717 100644 (file)
@@ -171,7 +171,7 @@ static int __media_get_devname_sysfs(struct media_entity *entity)
     char *p;
     int ret;
 
-    sprintf(sysname, "/sys/dev/char/%u:%u", entity->info.v4l.major,
+    snprintf(sysname, sizeof(sysname), "/sys/dev/char/%u:%u", entity->info.v4l.major,
         entity->info.v4l.minor);
 
     ret = readlink(sysname, target, sizeof(target));
@@ -183,10 +183,10 @@ static int __media_get_devname_sysfs(struct media_entity *entity)
     if (p == NULL)
         return -EINVAL;
 
-    sprintf(devname, "/tmp/%s", p + 1);
+    snprintf(devname, sizeof(devname), "/tmp/%s", p + 1);
 
     ret = mknod(devname, 0666 | S_IFCHR, MKDEV(81, entity->info.v4l.minor));
-    strcpy(entity->devname, devname);
+    strncpy(entity->devname, devname, 32);
 
     return 0;
 }
index e03d02ff668263dcb4f466f0bd6aaaf6e3d5bf73..0f4f3a2b9f2d783300d87b32331845ce48146889 100644 (file)
@@ -82,7 +82,7 @@ int exynos_subdev_get_node_num(const char *devname, int oflag, ...)
             break;
 
         /* video device node */
-        sprintf(filename, "/dev/v4l-subdev%d", i++);
+        snprintf(filename, sizeof(filename), "/dev/v4l-subdev%d", i++);
 
         /* if the node is video device */
         if ((lstat(filename, &s) == 0) && S_ISCHR(s.st_mode) &&
@@ -90,7 +90,7 @@ int exynos_subdev_get_node_num(const char *devname, int oflag, ...)
             minor = (int)((unsigned short)(s.st_rdev & 0x3f));
             ALOGD("try node: %s, minor: %d", filename, minor);
             /* open sysfs entry */
-            sprintf(filename, "/sys/class/video4linux/v4l-subdev%d/name", minor);
+            snprintf(filename, sizeof(filename), "/sys/class/video4linux/v4l-subdev%d/name", minor);
             stream_fd = fopen(filename, "r");
             if (stream_fd == NULL) {
                 ALOGE("failed to open sysfs entry for subdev");
@@ -137,7 +137,7 @@ int exynos_subdev_open_devname(const char *devname, int oflag, ...)
             break;
 
         /* video device node */
-        sprintf(filename, "/dev/v4l-subdev%d", i++);
+        snprintf(filename, sizeof(filename), "/dev/v4l-subdev%d", i++);
 
         /* if the node is video device */
         if ((lstat(filename, &s) == 0) && S_ISCHR(s.st_mode) &&
@@ -145,7 +145,7 @@ int exynos_subdev_open_devname(const char *devname, int oflag, ...)
             minor = (int)((unsigned short)(s.st_rdev & 0x3f));
             ALOGD("try node: %s, minor: %d", filename, minor);
             /* open sysfs entry */
-            sprintf(filename, "/sys/class/video4linux/v4l-subdev%d/name", minor);
+            snprintf(filename, sizeof(filename), "/sys/class/video4linux/v4l-subdev%d/name", minor);
             stream_fd = fopen(filename, "r");
             if (stream_fd == NULL) {
                 ALOGE("failed to open sysfs entry for subdev");
index c737c07d77dd1ad9157d6b35a7473973f52fbce0..b54766d61bb3742f47ae1053417140d6e63f3ecf 100644 (file)
@@ -121,7 +121,7 @@ int exynos_v4l2_open_devname(const char *devname, int oflag, ...)
             break;
 
         /* video device node */
-        sprintf(filename, "/dev/video%d", i++);
+        snprintf(filename, sizeof(filename), "/dev/video%d", i++);
 
         /* if the node is video device */
         if ((lstat(filename, &s) == 0) && S_ISCHR(s.st_mode) &&
@@ -129,7 +129,7 @@ int exynos_v4l2_open_devname(const char *devname, int oflag, ...)
             minor = (int)((unsigned short)(s.st_rdev & 0x3f));
             ALOGD("try node: %s, minor: %d", filename, minor);
             /* open sysfs entry */
-            sprintf(filename, "/sys/class/video4linux/video%d/name", minor);
+            snprintf(filename, sizeof(filename), "/sys/class/video4linux/video%d/name", minor);
             stream_fd = fopen(filename, "r");
             if (stream_fd == NULL) {
                 ALOGE("failed to open sysfs entry for videodev");
@@ -201,7 +201,7 @@ bool exynos_v4l2_enuminput(int fd, int index, char *input_name_buf)
     }
 
     input.index = index;
-    ret = ioctl(fd, VIDIOC_ENUMINPUT, &input);
+    ret = ioctl(fd, VIDIOC_ENUMINPUT, &input, 32);
     if (ret) {
         ALOGE("%s: no matching index founds", __func__);
         return false;
@@ -209,7 +209,7 @@ bool exynos_v4l2_enuminput(int fd, int index, char *input_name_buf)
 
     ALOGI("Name of input channel[%d] is %s", input.index, input.name);
 
-    strcpy(input_name_buf, (const char *)input.name);
+    strncpy(input_name_buf, (const char *)input.name, 32);
 
     Exynos_v4l2_Out();