changeset 13654:05c013fc7a3f

574 Minor issues in usr/src/cmd/format/startup.c Reviewed by: Dan McDonald <danmcd@nexenta.com> Reviewed by: Garrett D'Amore <garrett@damore.org> Reviewed by: Albert Lee <trisk@nexenta.com> Approved by: Albert Lee <trisk@nexenta.com>
author Alek Pinchuk <alek@nexenta.com>
date Sat, 31 Mar 2012 16:43:18 -0700
parents 16aca17fb9a4
children 0461a7e94e53
files usr/src/cmd/format/startup.c
diffstat 1 files changed, 13 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- 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);
 }