device-tree: fix memory leak
Signed-off-by: Sergey Fedorov <serge.fdrv@gmail.com> Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
parent
e6b8fd246c
commit
2bf9febc95
|
@ -324,6 +324,7 @@ int qemu_fdt_setprop_sized_cells_from_array(void *fdt,
|
||||||
uint64_t value;
|
uint64_t value;
|
||||||
int cellnum, vnum, ncells;
|
int cellnum, vnum, ncells;
|
||||||
uint32_t hival;
|
uint32_t hival;
|
||||||
|
int ret;
|
||||||
|
|
||||||
propcells = g_new0(uint32_t, numvalues * 2);
|
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++) {
|
for (vnum = 0; vnum < numvalues; vnum++) {
|
||||||
ncells = values[vnum * 2];
|
ncells = values[vnum * 2];
|
||||||
if (ncells != 1 && ncells != 2) {
|
if (ncells != 1 && ncells != 2) {
|
||||||
return -1;
|
ret = -1;
|
||||||
|
goto out;
|
||||||
}
|
}
|
||||||
value = values[vnum * 2 + 1];
|
value = values[vnum * 2 + 1];
|
||||||
hival = cpu_to_be32(value >> 32);
|
hival = cpu_to_be32(value >> 32);
|
||||||
if (ncells > 1) {
|
if (ncells > 1) {
|
||||||
propcells[cellnum++] = hival;
|
propcells[cellnum++] = hival;
|
||||||
} else if (hival != 0) {
|
} else if (hival != 0) {
|
||||||
return -1;
|
ret = -1;
|
||||||
|
goto out;
|
||||||
}
|
}
|
||||||
propcells[cellnum++] = cpu_to_be32(value);
|
propcells[cellnum++] = cpu_to_be32(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
return qemu_fdt_setprop(fdt, node_path, property, propcells,
|
ret = qemu_fdt_setprop(fdt, node_path, property, propcells,
|
||||||
cellnum * sizeof(uint32_t));
|
cellnum * sizeof(uint32_t));
|
||||||
|
out:
|
||||||
|
g_free(propcells);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue