diff options
| author | Sharath M Srinivasan <Sharath.Srinivasan@Sun.COM> | 2010-01-15 10:09:57 +0530 |
|---|---|---|
| committer | Sharath M Srinivasan <Sharath.Srinivasan@Sun.COM> | 2010-01-15 10:09:57 +0530 |
| commit | 02032da2d8b8c39f8555e913f6239bba49238e55 (patch) | |
| tree | 04127259ec0d522fe392686f057c5676f328aa4a /usr/src | |
| parent | b344f6b3aaff135e766e22b3d18489fe22a74198 (diff) | |
| download | illumos-joyent-02032da2d8b8c39f8555e913f6239bba49238e55.tar.gz | |
6909170 bootadm dumps core during bfu
Diffstat (limited to 'usr/src')
| -rw-r--r-- | usr/src/cmd/boot/installgrub/installgrub.c | 3 | ||||
| -rw-r--r-- | usr/src/cmd/fdisk/fdisk.c | 6 | ||||
| -rw-r--r-- | usr/src/cmd/format/menu_fdisk.c | 6 | ||||
| -rw-r--r-- | usr/src/lib/libfdisk/common/libfdisk.c | 26 |
4 files changed, 21 insertions, 20 deletions
diff --git a/usr/src/cmd/boot/installgrub/installgrub.c b/usr/src/cmd/boot/installgrub/installgrub.c index 6a60554e1b..c5bcbeb6ca 100644 --- a/usr/src/cmd/boot/installgrub/installgrub.c +++ b/usr/src/cmd/boot/installgrub/installgrub.c @@ -19,7 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Copyright 2010 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -311,7 +311,6 @@ get_start_sector(int fd) */ if ((rval = libfdisk_init(&epp, device_p0, NULL, FDISK_READ_DISK)) != FDISK_SUCCESS) { - libfdisk_fini(&epp); switch (rval) { /* * The first 3 cases are not an error per-se, just that diff --git a/usr/src/cmd/fdisk/fdisk.c b/usr/src/cmd/fdisk/fdisk.c index 1bcfaf72cd..ad0f40b15c 100644 --- a/usr/src/cmd/fdisk/fdisk.c +++ b/usr/src/cmd/fdisk/fdisk.c @@ -20,7 +20,7 @@ */ /* - * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Copyright 2010 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -1195,24 +1195,20 @@ main(int argc, char *argv[]) case FDISK_ENOVGEOM: fprintf(stderr, "Could not get virtual" " geometry for this device\n"); - libfdisk_fini(&epp); exit(1); break; case FDISK_ENOPGEOM: fprintf(stderr, "Could not get physical" " geometry for this device\n"); - libfdisk_fini(&epp); exit(1); break; case FDISK_ENOLGEOM: fprintf(stderr, "Could not get label" " geometry for this device\n"); - libfdisk_fini(&epp); exit(1); break; default: perror("Failed to initialise libfdisk.\n"); - libfdisk_fini(&epp); exit(1); break; } diff --git a/usr/src/cmd/format/menu_fdisk.c b/usr/src/cmd/format/menu_fdisk.c index 404904140c..3c1284b54c 100644 --- a/usr/src/cmd/format/menu_fdisk.c +++ b/usr/src/cmd/format/menu_fdisk.c @@ -19,7 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Copyright 2010 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -965,24 +965,20 @@ extpart_init(ext_part_t **epp) case FDISK_ENOVGEOM: err_print("Could not get virtual geometry for" " this device\n"); - libfdisk_fini(epp); fullabort(); break; case FDISK_ENOPGEOM: err_print("Could not get physical geometry for" " this device\n"); - libfdisk_fini(epp); fullabort(); break; case FDISK_ENOLGEOM: err_print("Could not get label geometry for " " this device\n"); - libfdisk_fini(epp); fullabort(); break; default: err_print("Failed to initialise libfdisk.\n"); - libfdisk_fini(epp); fullabort(); break; } diff --git a/usr/src/lib/libfdisk/common/libfdisk.c b/usr/src/lib/libfdisk/common/libfdisk.c index 0664bff1fa..d10443334b 100644 --- a/usr/src/lib/libfdisk/common/libfdisk.c +++ b/usr/src/lib/libfdisk/common/libfdisk.c @@ -19,7 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Copyright 2010 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -158,6 +158,7 @@ libfdisk_init(ext_part_t **epp, char *devstr, struct ipart *parttab, int opflag) int found_bad_magic = 0; if ((temp = calloc(1, sizeof (ext_part_t))) == NULL) { + *epp = NULL; return (ENOMEM); } @@ -185,23 +186,24 @@ libfdisk_init(ext_part_t **epp, char *devstr, struct ipart *parttab, int opflag) if (stat(temp->device_name, &sbuf) != 0) { /* Failed all options, give up */ - free(temp); - return (EINVAL); + rval = EINVAL; + goto fail; } } } /* Make sure the device is a raw device */ if ((sbuf.st_mode & S_IFMT) != S_IFCHR) { - return (EINVAL); + rval = EINVAL; + goto fail; } temp->ld_head = NULL; temp->sorted_ld_head = NULL; if ((temp->dev_fd = open(temp->device_name, O_RDWR, 0666)) < 0) { - free(temp); - return (EINVAL); + rval = EINVAL; + goto fail; } if ((temp->mtable = parttab) == NULL) { @@ -213,7 +215,7 @@ libfdisk_init(ext_part_t **epp, char *devstr, struct ipart *parttab, int opflag) * obtaining the disk geometry. */ if (rval != FDISK_EBADMAGIC) - return (rval); + goto fail; else found_bad_magic = 1; } @@ -222,7 +224,7 @@ libfdisk_init(ext_part_t **epp, char *devstr, struct ipart *parttab, int opflag) temp->op_flag = opflag; if ((rval = fdisk_init_disk_geom(temp)) != FDISK_SUCCESS) { - return (rval); + goto fail; } *epp = temp; @@ -235,6 +237,11 @@ libfdisk_init(ext_part_t **epp, char *devstr, struct ipart *parttab, int opflag) rval = fdisk_read_extpart(*epp); } return (rval); + +fail: + *epp = NULL; + free(temp); + return (rval); } int @@ -256,6 +263,9 @@ libfdisk_reset(ext_part_t *epp) void libfdisk_fini(ext_part_t **epp) { + if (*epp == NULL) + return; + fdisk_free_ld_nodes(*epp); (void) close((*epp)->dev_fd); free(*epp); |
