Whamcloud - gitweb
LU-1857 build: fix 'Unbounded source buffer' errors
authorSebastien Buisson <sebastien.buisson@bull.net>
Fri, 7 Sep 2012 13:59:51 +0000 (15:59 +0200)
committerOleg Drokin <green@whamcloud.com>
Mon, 29 Oct 2012 06:03:03 +0000 (02:03 -0400)
Fix 'unbounded source buffer' defects found by Coverity version 6.0.3:
Unbounded source buffer (STRING_SIZE)
Passing string of unknown size to a function that expects
a string of a particular size.

Signed-off-by: Sebastien Buisson <sebastien.buisson@bull.net>
Change-Id: I18e51f04e62241b5c5dad7ae963d8070d6954dd4
Reviewed-on: http://review.whamcloud.com/3904
Tested-by: Hudson
Reviewed-by: Bob Glossman <bob.glossman@intel.com>
Reviewed-by: Keith Mannthey <keith.mannthey@intel.com>
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lnet/utils/portals.c
lustre/tests/createtest.c
lustre/tests/openfilleddirunlink.c
lustre/tests/rename_many.c
lustre/tests/sendfile.c
lustre/tests/writemany.c
lustre/utils/llverfs.c
lustre/utils/lr_reader.c

index bce8033..dedb75d 100644 (file)
@@ -142,7 +142,7 @@ lnet_parse_ipaddr (__u32 *ipaddrp, char *str)
 }
 
 char *
-ptl_ipaddr_2_str (__u32 ipaddr, char *str, int lookup)
+ptl_ipaddr_2_str(__u32 ipaddr, char *str, size_t strsize, int lookup)
 {
 #ifdef HAVE_GETHOSTBYNAME
         __u32           net_ip;
@@ -152,7 +152,8 @@ ptl_ipaddr_2_str (__u32 ipaddr, char *str, int lookup)
                 net_ip = htonl (ipaddr);
                 he = gethostbyaddr (&net_ip, sizeof (net_ip), AF_INET);
                 if (he != NULL) {
-                        strcpy(str, he->h_name);
+                       strncpy(str, he->h_name, strsize - 1);
+                       str[strsize - 1] = '\0';
                         return (str);
                 }
         }
@@ -431,7 +432,7 @@ int
 jt_ptl_print_interfaces (int argc, char **argv)
 {
         struct libcfs_ioctl_data data;
-        char                     buffer[3][64];
+       char                     buffer[3][HOST_NAME_MAX + 1];
         int                      index;
         int                      rc;
 
@@ -448,9 +449,12 @@ jt_ptl_print_interfaces (int argc, char **argv)
                         break;
 
                 printf ("%s: (%s/%s) npeer %d nroute %d\n",
-                        ptl_ipaddr_2_str(data.ioc_u32[0], buffer[2], 1),
-                        ptl_ipaddr_2_str(data.ioc_u32[0], buffer[0], 0),
-                        ptl_ipaddr_2_str(data.ioc_u32[1], buffer[1], 0),
+                       ptl_ipaddr_2_str(data.ioc_u32[0], buffer[2],
+                                        sizeof(buffer[2]), 1),
+                       ptl_ipaddr_2_str(data.ioc_u32[0], buffer[0],
+                                        sizeof(buffer[0]), 0),
+                       ptl_ipaddr_2_str(data.ioc_u32[1], buffer[1],
+                                        sizeof(buffer[1]), 0),
                         data.ioc_u32[2], data.ioc_u32[3]);
         }
 
@@ -558,7 +562,7 @@ jt_ptl_print_peers (int argc, char **argv)
 {
         struct libcfs_ioctl_data data;
         lnet_process_id_t        id;
-        char                     buffer[2][64];
+       char                     buffer[2][HOST_NAME_MAX + 1];
         int                      index;
         int                      rc;
 
@@ -581,8 +585,12 @@ jt_ptl_print_peers (int argc, char **argv)
                         printf ("%-20s [%d]%s->%s:%d #%d\n",
                                 libcfs_id2str(id), 
                                 data.ioc_count, /* persistence */
-                                ptl_ipaddr_2_str (data.ioc_u32[2], buffer[0], 1), /* my ip */
-                                ptl_ipaddr_2_str (data.ioc_u32[0], buffer[1], 1), /* peer ip */
+                               /* my ip */
+                               ptl_ipaddr_2_str(data.ioc_u32[2], buffer[0],
+                                                sizeof(buffer[0]), 1),
+                               /* peer ip */
+                               ptl_ipaddr_2_str(data.ioc_u32[0], buffer[1],
+                                                sizeof(buffer[1]), 1),
                                 data.ioc_u32[1], /* peer port */
                                 data.ioc_u32[3]); /* conn_count */
                 } else if (g_net_is_compatible(NULL, PTLLND, 0)) {
@@ -608,7 +616,9 @@ jt_ptl_print_peers (int argc, char **argv)
                         printf ("%-20s [%d]@%s:%d\n",
                                 libcfs_nid2str(data.ioc_nid), /* peer nid */
                                 data.ioc_count,   /* peer persistence */
-                                ptl_ipaddr_2_str (data.ioc_u32[0], buffer[1], 1), /* peer ip */
+                               /* peer ip */
+                               ptl_ipaddr_2_str(data.ioc_u32[0], buffer[1],
+                                                sizeof(buffer[1]), 1),
                                 data.ioc_u32[1]); /* peer port */
                 } else {
                         printf ("%-20s [%d]\n",
@@ -754,7 +764,7 @@ jt_ptl_print_connections (int argc, char **argv)
 {
         struct libcfs_ioctl_data data;
         lnet_process_id_t        id;
-        char                     buffer[2][64];
+       char                     buffer[2][HOST_NAME_MAX + 1];
         int                      index;
         int                      rc;
 
@@ -780,8 +790,12 @@ jt_ptl_print_connections (int argc, char **argv)
                                 (data.ioc_u32[3] == SOCKLND_CONN_BULK_IN) ? "I" :
                                 (data.ioc_u32[3] == SOCKLND_CONN_BULK_OUT) ? "O" : "?",
                                 data.ioc_u32[4], /* scheduler */
-                                ptl_ipaddr_2_str (data.ioc_u32[2], buffer[0], 1), /* local IP addr */
-                                ptl_ipaddr_2_str (data.ioc_u32[0], buffer[1], 1), /* remote IP addr */
+                               /* local IP addr */
+                               ptl_ipaddr_2_str(data.ioc_u32[2], buffer[0],
+                                                sizeof(buffer[0]), 1),
+                               /* remote IP addr */
+                               ptl_ipaddr_2_str(data.ioc_u32[0], buffer[1],
+                                                sizeof(buffer[1]), 1),
                                 data.ioc_u32[1],         /* remote port */
                                 data.ioc_count, /* tx buffer size */
                                 data.ioc_u32[5], /* rx buffer size */
index 7bdbc78..643a14e 100644 (file)
@@ -65,7 +65,7 @@ int main(int argc, char *argv[])
                int mode = i | 0644;
                int rc;
 
-               sprintf(name, "%s-mknod%07o", argv[1], mode);
+               snprintf(name, sizeof(name), "%s-mknod%07o", argv[1], mode);
                rc = mknod(name, mode, 0x1234);
                switch (i) {
                case 0:
@@ -123,7 +123,7 @@ int main(int argc, char *argv[])
                int rc;
 
                mode = i | 0644;
-               sprintf(name, "%s-creat%07o", argv[1], mode);
+               snprintf(name, sizeof(name), "%s-creat%07o", argv[1], mode);
                fd = open(name, O_CREAT|O_RDONLY, mode);
                if (fd < 0) {
                        fprintf(stderr, "%s: ERROR creat %s: %s\n",
@@ -154,7 +154,7 @@ int main(int argc, char *argv[])
                struct stat st;
                int rc;
 
-               sprintf(name, "%s-mkdir%06o", argv[1], i | 0644);
+               snprintf(name, sizeof(name), "%s-mkdir%06o", argv[1], i | 0644);
                rc = mkdir(name, i | 0664);
                if (rc < 0) {
                        fprintf(stderr, "%s: ERROR mkdir %s: %s\n",
index af61782..b601185 100644 (file)
@@ -72,7 +72,7 @@ int main(int argc, char **argv)
                 exit(1);
         }
 
-        sprintf(fname, "%s/0", dname1);
+       snprintf(fname, sizeof(fname), "%s/0", dname1);
         fprintf(stderr, "creating file %s\n", fname);
         fd = creat(fname, 0666);
         if (fd < 0) {
index e20b498..03059b6 100644 (file)
@@ -185,7 +185,8 @@ int main(int argc, char *argv[])
                return 1;
        } else if (argv[optind] != NULL) {
                if (chdir(argv[optind]) < 0) {
-                       sprintf(msg, "chdir '%s'\n", argv[optind]);
+                       snprintf(msg, sizeof(msg),
+                                "chdir '%s'\n", argv[optind]);
                        perror(msg);
                        return 2;
                }
index feea955..0156425 100644 (file)
@@ -141,6 +141,6 @@ int main(int argc, char *argv[])
         }
         close(sd[1]), close(infd), close(outfd);
 
-        sprintf(cmd, "cmp %s %s\n", sfile, tfile);
+       snprintf(cmd, sizeof(cmd), "cmp %s %s\n", sfile, tfile);
         return system(cmd);
 }
index 9e70741..72d1ac6 100644 (file)
@@ -188,7 +188,8 @@ int run_one_child(char *file, int thread, int seconds)
                                 break;
                 }
                 
-                sprintf(filename, "%s-%d-%ld", file, thread, nfiles);
+               snprintf(filename, sizeof(filename), "%s-%d-%ld",
+                        file, thread, nfiles);
 
                 fd = open(filename, O_RDWR | O_CREAT, 0666);
                 if (fd < 0) {
@@ -247,7 +248,7 @@ int main(int argc, char *argv[])
         char *directory;
         int i = 1, rc = 0;
 
-        sprintf(cmdname, "%s", argv[0]);
+       snprintf(cmdname, sizeof(cmdname), "%s", argv[0]);
 
         while((i < argc) && (argv[i][0] == '-')) {
                 switch (argv[i][1]) {
@@ -291,7 +292,7 @@ int main(int argc, char *argv[])
                 }
                 if (rc == 0) {
                         /* children */
-                        sprintf(cmdname, "%s-%d", argv[0], i);
+                       snprintf(cmdname, sizeof(cmdname), "%s-%d", argv[0], i);
                         return (run_one_child(directory, i, duration));
                 } else {
                         /* parent */
index 8200826..7af885e 100644 (file)
@@ -869,7 +869,8 @@ guess:
                fprintf(stderr, "Memory allocation failed for chunk_buf\n");
                return 4;
        }
-       sprintf(filecount, "%s/%s.filecount", testdir, progname);
+       snprintf(filecount, sizeof(filecount), "%s/%s.filecount",
+                testdir, progname);
        if (writeoption) {
                (void)mkdir(testdir, dirmode);
 
index ecbc11d..afaaf33 100644 (file)
@@ -123,7 +123,7 @@ int main(int argc, char *const argv[])
         }
 
         memset(cmd, 0, sizeof(cmd));
-        sprintf(cmd,
+       snprintf(cmd, sizeof(cmd),
                 "%s -c -R 'dump /%s %s/%s' %s",
                 DEBUGFS, LAST_RCVD, tmpdir, LAST_RCVD, dev);