From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53284) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xz5vo-0006V6-HC for qemu-devel@nongnu.org; Thu, 11 Dec 2014 10:45:41 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Xz5vd-00035a-PJ for qemu-devel@nongnu.org; Thu, 11 Dec 2014 10:45:32 -0500 Received: from mail-la0-x22d.google.com ([2a00:1450:4010:c03::22d]:40950) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xz5vd-00034k-Hj for qemu-devel@nongnu.org; Thu, 11 Dec 2014 10:45:21 -0500 Received: by mail-la0-f45.google.com with SMTP id gq15so4478140lab.4 for ; Thu, 11 Dec 2014 07:45:19 -0800 (PST) From: Sergey Fedorov Date: Thu, 11 Dec 2014 18:45:05 +0300 Message-Id: <1418312705-27475-1-git-send-email-serge.fdrv@gmail.com> Subject: [Qemu-devel] [PATCH] device-tree: fix memory leak List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Sergey Fedorov , Peter Crosthwaite , Alexander Graf Signed-off-by: Sergey Fedorov --- device_tree.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/device_tree.c b/device_tree.c index df9eed9..4cb1cd5 100644 --- a/device_tree.c +++ b/device_tree.c @@ -324,6 +324,7 @@ int qemu_fdt_setprop_sized_cells_from_array(void *fdt, uint64_t value; int cellnum, vnum, ncells; uint32_t hival; + int ret; propcells = g_new0(uint32_t, numvalues * 2); @@ -331,18 +332,23 @@ int qemu_fdt_setprop_sized_cells_from_array(void *fdt, for (vnum = 0; vnum < numvalues; vnum++) { ncells = values[vnum * 2]; if (ncells != 1 && ncells != 2) { - return -1; + ret = -1; + goto out; } value = values[vnum * 2 + 1]; hival = cpu_to_be32(value >> 32); if (ncells > 1) { propcells[cellnum++] = hival; } else if (hival != 0) { - return -1; + ret = -1; + goto out; } propcells[cellnum++] = cpu_to_be32(value); } - return qemu_fdt_setprop(fdt, node_path, property, propcells, - cellnum * sizeof(uint32_t)); + ret = qemu_fdt_setprop(fdt, node_path, property, propcells, + cellnum * sizeof(uint32_t)); +out: + g_free(propcells); + return ret; } -- 1.9.1