Index: trunk/i386/util/fdisk/fdisk.c =================================================================== --- trunk/i386/util/fdisk/fdisk.c (revision 2634) +++ trunk/i386/util/fdisk/fdisk.c (revision 2635) @@ -239,6 +239,8 @@ } mbr_binary = (char *)malloc(MBR_CODE_SIZE); + if (!mbr_binary) errx(1, "out of memory"); + if ((fd = open(mbrfile, O_RDONLY)) == -1) { warn("could not open MBR file %s", mbrfile); bzero(mbr_binary, MBR_CODE_SIZE); @@ -259,6 +261,7 @@ } else if (i_flag) { /* If they didn't specify -a, they'll get the default auto style */ mp = MBR_alloc(NULL); + if (!mp) errx(1, "out of memory"); if (AUTO_init(&disk, auto_style, mp) != AUTO_OK) { errx(1, "error initializing disk"); } Index: trunk/i386/util/fdisk/part.c =================================================================== --- trunk/i386/util/fdisk/part.c (revision 2634) +++ trunk/i386/util/fdisk/part.c (revision 2635) @@ -241,7 +241,7 @@ /* Zero out entry if not used */ if (partn->id == DOSPTYP_UNUSED ) { - memset(partn, 0, sizeof(*partn)); + memset(partn, 0, sizeof(prt_t)); } } @@ -353,7 +353,7 @@ /* Zero out entry if not used */ if (part->id == DOSPTYP_UNUSED ) { - memset(part, 0, sizeof(*part)); + memset(part, 0, sizeof(prt_t)); return; } @@ -390,7 +390,7 @@ /* Zero out entry if not used */ if (part->id == DOSPTYP_UNUSED ) { - memset(part, 0, sizeof(*part)); + memset(part, 0, sizeof(prt_t)); return; } Index: trunk/i386/util/fdisk/user.c =================================================================== --- trunk/i386/util/fdisk/user.c (revision 2634) +++ trunk/i386/util/fdisk/user.c (revision 2635) @@ -145,7 +145,7 @@ static int editlevel; mbr_t *mbr; cmd_t cmd; - int i, st, fd; + int i, st = CMD_EXIT, fd; int modified = 0; /* One level deeper */ @@ -156,7 +156,10 @@ /* Read MBR & partition */ mbr = MBR_alloc(NULL); + if (!mbr) errx(1, "out of memory"); fd = DISK_open(disk->name, O_RDONLY); + if (fd == -1) + err(1, "Could not open %s", disk->name); MBR_read(disk, fd, offset, mbr); DISK_close(fd); @@ -166,9 +169,9 @@ if (mbr->signature != MBR_SIGNATURE) { int yn = ask_yn("The signature for this MBR is invalid.\nWould you like to initialize the partition table?", 1); if (yn) { - strcpy(cmd.cmd, "erase"); + strlcpy(cmd.cmd, "erase", sizeof(cmd.cmd)); cmd.args[0] = '\0'; - st = Xerase(&cmd, disk, mbr, tt, offset); + Xerase(&cmd, disk, mbr, tt, offset); modified = 1; } } @@ -189,7 +192,7 @@ break; /* Quick hack to put in '?' == 'help' */ - if (!strcmp(cmd.cmd, "?")) + if (!strncmp(cmd.cmd, "?", sizeof("?"))) i = 0; /* Check for valid command */ @@ -197,7 +200,7 @@ printf("Invalid command '%s'. Try 'help'.\n", cmd.cmd); continue; } else - strcpy(cmd.cmd, cmd_table[i].cmd); + strlcpy(cmd.cmd, cmd_table[i].cmd, sizeof(cmd.cmd)); /* Call function */ st = cmd_table[i].fcn(&cmd, disk, mbr, tt, offset); @@ -252,11 +255,13 @@ disk_t *disk; int do_dump; { - int fd, offset, firstoff; + int fd /*, offset, firstoff*/; mbr_t *mbr; fd = DISK_open(disk->name, O_RDONLY); - offset = firstoff = 0; + if (fd == -1) + err(1, "Could not open %s", disk->name); + /*offset = firstoff = 0;*/ if (!do_dump) DISK_printmetrics(disk); Index: trunk/i386/util/fdisk/mbr.c =================================================================== --- trunk/i386/util/fdisk/mbr.c (revision 2634) +++ trunk/i386/util/fdisk/mbr.c (revision 2635) @@ -237,7 +237,10 @@ mbr_t *mbrd; mbrd = MBR_alloc(NULL); + if (!mbr) errx(1, "out of memory"); fd = DISK_open(disk->name, O_RDONLY); + if (fd == -1) + err(1, "Could not open %s", disk->name); MBR_read(disk, fd, offset, mbrd); DISK_close(fd); MBR_parse(disk, offset, reloff, mbrd); @@ -393,6 +396,7 @@ if (mbr == NULL) { mbr = MBR_alloc(prev_mbr); + if (!mbr) errx(1, "out of memory"); if (head == NULL) head = mbr; } @@ -446,6 +450,7 @@ MBR_alloc(mbr_t *parent) { mbr_t *mbr = (mbr_t *)malloc(sizeof(mbr_t)); + if (!mbr) return NULL; bzero(mbr, sizeof(mbr_t)); if (parent) { parent->next = mbr; @@ -475,9 +480,12 @@ int i, fd, offset, firstoff; fd = DISK_open(disk->name, O_RDONLY); + if (fd == -1) + err(1, "Could not open %s", disk->name); firstoff = offset = 0; do { mbr = MBR_alloc(mbr); + if (!mbr) errx(1, "out of memory"); if (head == NULL) { head = mbr; } @@ -511,6 +519,8 @@ int fd; fd = DISK_open(disk->name, O_RDWR); + if (fd == -1) + err(1, "Could not open %s", disk->name); while (mbr) { MBR_make(mbr); result = MBR_write(disk, fd, mbr); Index: trunk/i386/util/fdisk/disk.c =================================================================== --- trunk/i386/util/fdisk/disk.c (revision 2634) +++ trunk/i386/util/fdisk/disk.c (revision 2635) @@ -167,7 +167,10 @@ /* Get label metrics */ if ((fd = DISK_open(name, O_RDONLY)) != -1) { lm = malloc(sizeof(DISK_metrics)); - + if (!lm) { + err(1, "DISK_getlabelmetrics: Could not allocate memory"); + return NULL; + } if (fstat(fd, &st) == -1) err(1, "%s", name); if (!S_ISREG(st.st_mode) || S_ISBLK(st.st_mode)) { @@ -265,13 +268,12 @@ disk_t *disk; DISK_metrics *user; { - int ret; + int ret = 1; int fd; uint32_t sector_size; /* Default to 512 bytes per sector, in case of failure. */ user->sector_size = 512; - ret = 1; fd = DISK_open(disk->name, O_RDONLY); if (fd == -1) {