diff options
author | John Sonnenschein <johns@joyent.com> | 2012-05-17 18:26:57 +0000 |
---|---|---|
committer | John Sonnenschein <johns@joyent.com> | 2012-05-17 18:26:57 +0000 |
commit | 04b244dd661c24b510ac22936decfc0972d202d3 (patch) | |
tree | 3ebfef98afc303fddf3415d6fba64e8682f495e8 /usr/src/cmd/format/startup.c | |
parent | eac250589e41f1b705e1b7427b02b3379aac9f9e (diff) | |
parent | a69187741b83640a90dd8586195456dd50c016a8 (diff) | |
download | illumos-joyent-20120517.tar.gz |
Merge git.joyent.com:illumos-joyent20120517
Diffstat (limited to 'usr/src/cmd/format/startup.c')
-rw-r--r-- | usr/src/cmd/format/startup.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/usr/src/cmd/format/startup.c b/usr/src/cmd/format/startup.c index 0396a62997..e31e766a8b 100644 --- a/usr/src/cmd/format/startup.c +++ b/usr/src/cmd/format/startup.c @@ -19,6 +19,8 @@ * CDDL HEADER END */ /* + * Copyright 2012 Nexenta Systems, Inc. All rights reserved. + * * Copyright (c) 2011 Gary Mills * * Copyright (c) 1993, 2010, Oracle and/or its affiliates. All rights reserved. @@ -2962,22 +2964,24 @@ char *arglist[]; * one of the conventional whole disk name. */ static int -name_represents_wholedisk(name) -char *name; +name_represents_wholedisk(char *name) { char symname[MAXPATHLEN]; char localname[MAXPATHLEN]; char *nameptr; + ssize_t symname_size; + if (strlcpy(localname, name, MAXPATHLEN) >= MAXPATHLEN) + return (1); /* buffer overflow, reject this name */ - (void) memset(symname, 0, MAXPATHLEN); - (void) memset(localname, 0, MAXPATHLEN); - (void) strcpy(localname, name); - - while (readlink(localname, symname, MAXPATHLEN) != -1) { + while ((symname_size = readlink( + localname, symname, MAXPATHLEN - 1)) != -1) { + symname[symname_size] = '\0'; nameptr = symname; - if (strncmp(symname, DISK_PREFIX, strlen(DISK_PREFIX)) == 0) - nameptr += strlen(DISK_PREFIX); + if (strncmp(symname, DISK_PREFIX, + (sizeof (DISK_PREFIX) - 1)) == 0) + nameptr += (sizeof (DISK_PREFIX) - 1); + if (conventional_name(nameptr)) { if (whole_disk_name(nameptr)) return (0); @@ -2985,7 +2989,6 @@ char *name; return (1); } (void) strcpy(localname, symname); - (void) memset(symname, 0, MAXPATHLEN); } return (0); } |