boot0cfg: check result of malloc in read_mbr()
authorAlexander Kuleshov <kuleshovmail@gmail.com>
Tue, 8 Dec 2015 18:38:12 +0000 (00:38 +0600)
committerSascha Wildner <saw@online.de>
Thu, 24 Dec 2015 17:14:00 +0000 (18:14 +0100)
We allocating buffer for MBR in the read_mbr() function. The malloc()
may return NULL, so this patch checks the result of the malloc and
exit with the error if we can't allocate memory.

Besides this we close file descriptor.

usr.sbin/boot0cfg/boot0cfg.c

index 53e7e95..4694f17 100644 (file)
@@ -24,7 +24,6 @@
  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  * $FreeBSD: src/usr.sbin/boot0cfg/boot0cfg.c,v 1.7.2.4 2002/03/16 01:06:51 mikeh Exp $
- * $DragonFly: src/usr.sbin/boot0cfg/boot0cfg.c,v 1.6 2008/03/24 23:04:19 swildner Exp $
  */
 
 #include <sys/param.h>
@@ -238,11 +237,14 @@ read_mbr(const char *disk, u_int8_t **mbr, int check_version)
            err(1, "%s", disk);
        if (n != mbr_size)
            errx(1, "%s: short read", disk);
+       close(fd);
        return (mbr_size);
     }
-    *mbr = malloc(sizeof(buf));
-    memcpy(*mbr, buf, sizeof(buf));
 
+    if ((*mbr = malloc(sizeof(buf))) == NULL)
+       errx(1, "%s: unable to allocate mbr buffer", disk);
+    memcpy(*mbr, buf, sizeof(buf));
+    close(fd);
     return sizeof(buf);
 }