Mercurial > illumos > illumos-gate
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); }