From owner-svn-src-user@FreeBSD.ORG Thu May 15 14:01:34 2014 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id C6C98CE4; Thu, 15 May 2014 14:01:34 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 9A8DE2AE9; Thu, 15 May 2014 14:01:34 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.8/8.14.8) with ESMTP id s4FE1YBc007991; Thu, 15 May 2014 14:01:34 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.8/8.14.8/Submit) id s4FE1YhE007990; Thu, 15 May 2014 14:01:34 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201405151401.s4FE1YhE007990@svn.freebsd.org> From: Marcel Moolenaar Date: Thu, 15 May 2014 14:01:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r266124 - user/marcel/mkimg X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 May 2014 14:01:34 -0000 Author: marcel Date: Thu May 15 14:01:34 2014 New Revision: 266124 URL: http://svnweb.freebsd.org/changeset/base/266124 Log: Check allocation errors and free memory we allocated. Modified: user/marcel/mkimg/vmdk.c Modified: user/marcel/mkimg/vmdk.c ============================================================================== --- user/marcel/mkimg/vmdk.c Thu May 15 12:44:00 2014 (r266123) +++ user/marcel/mkimg/vmdk.c Thu May 15 14:01:34 2014 (r266124) @@ -116,7 +116,7 @@ vmdk_write(int fd) uint64_t imagesz; size_t gdsz, gtsz; uint32_t sec; - int desc_len, n, ngrains, ngts; + int error, desc_len, n, ngrains, ngts; imagesz = (image_get_size() * secsz) / VMDK_SECTOR_SIZE; @@ -130,6 +130,9 @@ vmdk_write(int fd) n = asprintf(&desc, desc_fmt, 1 /*version*/, 0 /*CID*/, (uintmax_t)imagesz /*size*/, "" /*name*/, ncyls /*cylinders*/, nheads /*heads*/, nsecs /*sectors*/); + if (n == -1) + return (ENOMEM); + desc_len = (n + VMDK_SECTOR_SIZE - 1) & ~(VMDK_SECTOR_SIZE - 1); desc = realloc(desc, desc_len); memset(desc + n, 0, desc_len - n); @@ -146,8 +149,11 @@ vmdk_write(int fd) ngts = (ngrains + VMDK_NGTES - 1) / VMDK_NGTES; gdsz = (ngts * sizeof(uint32_t) + VMDK_SECTOR_SIZE - 1) & ~(VMDK_SECTOR_SIZE - 1); - gd = malloc(gdsz); - memset(gd, 0, gdsz); + gd = calloc(gdsz, 1); + if (gd == NULL) { + free(desc); + return (ENOMEM); + } sec += gdsz / VMDK_SECTOR_SIZE; for (n = 0; n < ngts; n++) { @@ -165,8 +171,12 @@ vmdk_write(int fd) be32enc(&hdr.nl_test, VMDK_NL_TEST); gtsz = ngts * VMDK_NGTES * sizeof(uint32_t); - gt = malloc(gtsz); - memset(gt, 0, gtsz); + gt = calloc(gtsz, 1); + if (gt == NULL) { + free(gd); + free(desc); + return (ENOMEM); + } for (n = 0; n < ngrains; n++) le32enc(gt + n, sec + n * grainsz); @@ -176,7 +186,13 @@ vmdk_write(int fd) write(fd, gd, gdsz); write(fd, gt, gtsz); lseek(fd, sec * VMDK_SECTOR_SIZE, SEEK_SET); - return (image_copyout(fd)); + error = image_copyout(fd); + + free(gt); + free(gd); + free(desc); + + return (error); } static struct mkimg_format vmdk_format = {