From 4db3aa0842f2be97aae017d351169e5237223156 Mon Sep 17 00:00:00 2001 From: Sebastien Buisson Date: Fri, 7 Sep 2012 15:59:51 +0200 Subject: [PATCH] LU-1857 build: fix 'Unbounded source buffer' errors 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 Change-Id: I18e51f04e62241b5c5dad7ae963d8070d6954dd4 Reviewed-on: http://review.whamcloud.com/3904 Tested-by: Hudson Reviewed-by: Bob Glossman Reviewed-by: Keith Mannthey Tested-by: Maloo Reviewed-by: Oleg Drokin --- lnet/utils/portals.c | 40 +++++++++++++++++++++++++------------- lustre/tests/createtest.c | 6 +++--- lustre/tests/openfilleddirunlink.c | 2 +- lustre/tests/rename_many.c | 3 ++- lustre/tests/sendfile.c | 2 +- lustre/tests/writemany.c | 7 ++++--- lustre/utils/llverfs.c | 3 ++- lustre/utils/lr_reader.c | 2 +- 8 files changed, 41 insertions(+), 24 deletions(-) diff --git a/lnet/utils/portals.c b/lnet/utils/portals.c index bce8033..dedb75d 100644 --- a/lnet/utils/portals.c +++ b/lnet/utils/portals.c @@ -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 */ diff --git a/lustre/tests/createtest.c b/lustre/tests/createtest.c index 7bdbc78..643a14e 100644 --- a/lustre/tests/createtest.c +++ b/lustre/tests/createtest.c @@ -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", diff --git a/lustre/tests/openfilleddirunlink.c b/lustre/tests/openfilleddirunlink.c index af61782..b601185 100644 --- a/lustre/tests/openfilleddirunlink.c +++ b/lustre/tests/openfilleddirunlink.c @@ -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) { diff --git a/lustre/tests/rename_many.c b/lustre/tests/rename_many.c index e20b498..03059b6 100644 --- a/lustre/tests/rename_many.c +++ b/lustre/tests/rename_many.c @@ -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; } diff --git a/lustre/tests/sendfile.c b/lustre/tests/sendfile.c index feea955..0156425 100644 --- a/lustre/tests/sendfile.c +++ b/lustre/tests/sendfile.c @@ -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); } diff --git a/lustre/tests/writemany.c b/lustre/tests/writemany.c index 9e70741..72d1ac6 100644 --- a/lustre/tests/writemany.c +++ b/lustre/tests/writemany.c @@ -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 */ diff --git a/lustre/utils/llverfs.c b/lustre/utils/llverfs.c index 8200826..7af885e 100644 --- a/lustre/utils/llverfs.c +++ b/lustre/utils/llverfs.c @@ -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); diff --git a/lustre/utils/lr_reader.c b/lustre/utils/lr_reader.c index ecbc11d..afaaf33 100644 --- a/lustre/utils/lr_reader.c +++ b/lustre/utils/lr_reader.c @@ -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); -- 1.8.3.1