diff options
author | Sergey Fedorov <serge.fdrv@gmail.com> | 2014-12-11 18:45:05 +0300 |
---|---|---|
committer | Alexander Graf <agraf@suse.de> | 2015-01-07 16:16:26 +0100 |
commit | 2bf9febc95e5bcef8edb10ebc967325917b9c958 (patch) | |
tree | 43ac3a3cdb7e846db992cb7b1f013e391a7ad9e9 /device_tree.c | |
parent | e6b8fd246c19701b05f5b65a56b0cc91bbd05ac6 (diff) | |
download | qemu-2bf9febc95e5bcef8edb10ebc967325917b9c958.zip qemu-2bf9febc95e5bcef8edb10ebc967325917b9c958.tar.gz qemu-2bf9febc95e5bcef8edb10ebc967325917b9c958.tar.bz2 |
device-tree: fix memory leak
Signed-off-by: Sergey Fedorov <serge.fdrv@gmail.com>
Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'device_tree.c')
-rw-r--r-- | device_tree.c | 14 |
1 files 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; } |