Print this page
574 Minor issues in usr/src/cmd/format/startup.c
*** 17,26 ****
--- 17,28 ----
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
+ * Copyright (c) 2012 Nexenta System Inc.
+ *
* Copyright (c) 2011 Gary Mills
*
* Copyright (c) 1993, 2010, Oracle and/or its affiliates. All rights reserved.
*/
*** 2960,2991 ****
/*
* This Function checks if the non-conventional name is a a link to
* one of the conventional whole disk name.
*/
static int
! name_represents_wholedisk(name)
! char *name;
{
char symname[MAXPATHLEN];
char localname[MAXPATHLEN];
char *nameptr;
! (void) memset(symname, 0, MAXPATHLEN);
! (void) memset(localname, 0, MAXPATHLEN);
! (void) strcpy(localname, name);
!
! 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);
! else
! return (1);
! }
(void) strcpy(localname, symname);
- (void) memset(symname, 0, MAXPATHLEN);
}
return (0);
}
--- 2962,2988 ----
/*
* This Function checks if the non-conventional name is a a link to
* one of the conventional whole disk name.
*/
static int
! name_represents_wholedisk(char *name)
{
char symname[MAXPATHLEN];
char localname[MAXPATHLEN];
char *nameptr;
+ ssize_t symname_size;
+ size_t disk_prefix_len = strlen(DISK_PREFIX);
+ if (strlcpy(localname, name, MAXPATHLEN) >= MAXPATHLEN)
+ return (1); /* buffer overflow, reject this name */
! while ((symname_size = readlink(localname, symname, MAXPATHLEN - 1)) != -1) {
! symname[symname_size] = '\0';
nameptr = symname;
! if (strncmp(symname, DISK_PREFIX, disk_prefix_len) == 0)
! nameptr += disk_prefix_len;
! if (conventional_name(nameptr))
! return (!whole_disk_name(nameptr));
(void) strcpy(localname, symname);
}
return (0);
}