diff options
author | Andrey A. Chernov <ache@FreeBSD.org> | 2000-07-15 13:37:47 +0000 |
---|---|---|
committer | Andrey A. Chernov <ache@FreeBSD.org> | 2000-07-15 13:37:47 +0000 |
commit | 2b5ce8a96150e5880147f3fc6168e3710c804e31 (patch) | |
tree | a6c1160368b6607ba51362fbd1cccdbd6076ad68 /sbin/i386/fdisk | |
parent | fc80937e0bd5dd6780089a9fc8b1cefa546b3737 (diff) | |
download | src-2b5ce8a96150e5880147f3fc6168e3710c804e31.tar.gz src-2b5ce8a96150e5880147f3fc6168e3710c804e31.zip |
Fix memory leak/double free found by phkmalloc
Uniform mboot.bootinst allocation code to be independent of functions order
Notes
Notes:
svn path=/head/; revision=63218
Diffstat (limited to 'sbin/i386/fdisk')
-rw-r--r-- | sbin/i386/fdisk/fdisk.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/sbin/i386/fdisk/fdisk.c b/sbin/i386/fdisk/fdisk.c index dc0b5de9f162..acbd6ae22701 100644 --- a/sbin/i386/fdisk/fdisk.c +++ b/sbin/i386/fdisk/fdisk.c @@ -299,10 +299,11 @@ main(int argc, char *argv[]) } /* (abu)use mboot.bootinst to probe for the sector size */ + if (mboot.bootinst != NULL) + free(mboot.bootinst); if ((mboot.bootinst = malloc(MAX_SEC_SIZE)) == NULL) err(1, "cannot allocate buffer to determine disk sector size"); read_disk(0, mboot.bootinst); - free(mboot.bootinst); if (s_flag) { @@ -494,6 +495,8 @@ init_boot(void) err(1, "%s", fname); if ((mboot.bootinst_size = sb.st_size) % secsize != 0) errx(1, "%s: length must be a multiple of sector size", fname); + if (mboot.bootinst != NULL) + free(mboot.bootinst); if ((mboot.bootinst = malloc(mboot.bootinst_size = sb.st_size)) == NULL) errx(1, "%s: unable to allocate read buffer", fname); if ((n = read(fd, mboot.bootinst, mboot.bootinst_size)) == -1 || @@ -779,14 +782,13 @@ get_params() static int read_s0() { - if (mboot.bootinst != NULL) { + mboot.bootinst_size = secsize; + if (mboot.bootinst != NULL) free(mboot.bootinst); - mboot.bootinst_size = secsize; - if ((mboot.bootinst = malloc(mboot.bootinst_size)) == NULL) { - warnx("unable to allocate buffer to read fdisk " - "partition table"); - return -1; - } + if ((mboot.bootinst = malloc(mboot.bootinst_size)) == NULL) { + warnx("unable to allocate buffer to read fdisk " + "partition table"); + return -1; } if (read_disk(0, mboot.bootinst) == -1) { warnx("can't read fdisk partition table"); |