574 Minor issues in usr/src/cmd/format/startup.c
Reviewed by: Dan McDonald <
[email protected]>
Reviewed by: Garrett D'Amore <
[email protected]>
Reviewed by: Albert Lee <
[email protected]>
Approved by: Albert Lee <
[email protected]>
--- a/usr/src/cmd/format/startup.c Fri Mar 30 10:49:58 2012 -0400
+++ b/usr/src/cmd/format/startup.c Sat Mar 31 16:43:18 2012 -0700
@@ -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 @@
* 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 ((symname_size = readlink(
+ localname, symname, MAXPATHLEN - 1)) != -1) {
+ symname[symname_size] = '\0';
+ nameptr = symname;
+ if (strncmp(symname, DISK_PREFIX,
+ (sizeof (DISK_PREFIX) - 1)) == 0)
+ nameptr += (sizeof (DISK_PREFIX) - 1);
- while (readlink(localname, symname, MAXPATHLEN) != -1) {
- nameptr = symname;
- if (strncmp(symname, DISK_PREFIX, strlen(DISK_PREFIX)) == 0)
- nameptr += strlen(DISK_PREFIX);
if (conventional_name(nameptr)) {
if (whole_disk_name(nameptr))
return (0);
@@ -2985,7 +2989,6 @@
return (1);
}
(void) strcpy(localname, symname);
- (void) memset(symname, 0, MAXPATHLEN);
}
return (0);
}