Fix scanf() format vulnerabilities
authorHenning Rogge <henning.rogge@fkie.fraunhofer.de>
Mon, 22 Oct 2012 13:25:18 +0000 (15:25 +0200)
committerHenning Rogge <henning.rogge@fkie.fraunhofer.de>
Mon, 22 Oct 2012 13:25:18 +0000 (15:25 +0200)
src/linux/apm.c
src/linux/net.c

index 8848acf..a9d5648 100644 (file)
@@ -183,7 +183,7 @@ apm_read_apm(struct olsr_apm_info *ainfo)
   //printf("READ: %s\n", buffer);
 
   /* Get the info */
-  sscanf(buffer, "%s %d.%d %x %x %x %x %d%% %d %s\n", lainfo.driver_version, &lainfo.apm_version_major, &lainfo.apm_version_minor,
+  sscanf(buffer, "%10s %d.%d %x %x %x %x %d%% %d %10s\n", lainfo.driver_version, &lainfo.apm_version_major, &lainfo.apm_version_minor,
          &lainfo.apm_flags, &lainfo.ac_line_status, &lainfo.battery_status, &lainfo.battery_flags, &lainfo.battery_percentage,
          &lainfo.battery_time, units);
 
@@ -247,7 +247,7 @@ apm_read_acpi(struct olsr_apm_info *ainfo)
     if (fgets(inbuff, sizeof(inbuff), fd) == NULL)
       break;
 
-    sscanf(inbuff, "%s %s %s %s", s1, s2, s3, s4);
+    sscanf(inbuff, "%32s %32s %32s %32s", s1, s2, s3, s4);
     if (!strcasecmp(s2, "full"))
       bat_max = atoi(s4);
   }
@@ -261,7 +261,7 @@ apm_read_acpi(struct olsr_apm_info *ainfo)
     char s1[32], s2[32], s3[32], s4[32], inbuff[127];
     if (fgets(inbuff, sizeof(inbuff), fd) == NULL)
       break;
-    sscanf(inbuff, "%s %s %s %s", s1, s2, s3, s4);
+    sscanf(inbuff, "%32s %32s %32s %32s", s1, s2, s3, s4);
 
     /* find remaining juice */
     if (!strcasecmp(s1, "Remaining"))
@@ -302,7 +302,7 @@ acpi_probe(void)
       continue;
 
     /* Extract info */
-    rc = fscanf(fd, "%s %s", s1, s2);
+    rc = fscanf(fd, "%32s %32s", s1, s2);
 
     /* Close info entry */
     fclose(fd);
@@ -331,7 +331,7 @@ acpi_probe(void)
       continue;
 
     /* Extract info */
-    rc = fscanf(fd, "%s %s", s1, s2);
+    rc = fscanf(fd, "%32s %32s", s1, s2);
 
     /* Close info entry */
     fclose(fd);
index ed45365..f5c166f 100644 (file)
@@ -634,7 +634,7 @@ get_ipv6_address(char *ifname, struct sockaddr_in6 *saddr6, struct olsr_ip_prefi
 
   if ((f = fopen(PATH_PROCNET_IFINET6, "r")) != NULL) {
     while (fscanf
-           (f, "%4s%4s%4s%4s%4s%4s%4s%4s %x %02x %02x %02x %20s\n", addr6p[0], addr6p[1], addr6p[2], addr6p[3], addr6p[4],
+           (f, "%4s%4s%4s%4s%4s%4s%4s%4s %x %02x %02x %02x %16s\n", addr6p[0], addr6p[1], addr6p[2], addr6p[3], addr6p[4],
             addr6p[5], addr6p[6], addr6p[7], &if_idx, &plen, &scope, &dad_status, devname) != EOF) {
       if (!strcmp(devname, ifname)) {
         bool isNetWide = false;