[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC v0 04/10] device_tree: get_prop(): memdup returned pro
From: |
Peter A. G. Crosthwaite |
Subject: |
[Qemu-devel] [RFC v0 04/10] device_tree: get_prop(): memdup returned properties |
Date: |
Mon, 17 Sep 2012 19:02:56 +1000 |
getprop currently return a pointer into the device tree itself. These pointers
will be corrupted if the device tree is written to in anyway. To make getprop()
safe, duplicate the property so that the value doesnt change over the lifetime
of the returned pointer.
Signed-off-by: Peter A. G. Crosthwaite <address@hidden>
---
device_tree.c | 11 +++++++----
device_tree.h | 2 +-
2 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/device_tree.c b/device_tree.c
index 7edbbff..3e22286 100644
--- a/device_tree.c
+++ b/device_tree.c
@@ -178,7 +178,7 @@ int qemu_devtree_setprop_string(void *fdt, const char
*node_path,
return r;
}
-const void *qemu_devtree_getprop(void *fdt, const char *node_path,
+void *qemu_devtree_getprop(void *fdt, const char *node_path,
const char *property, int *lenp,
bool inherit, Error **errp)
{
@@ -200,7 +200,7 @@ const void *qemu_devtree_getprop(void *fdt, const char
*node_path,
error_set(errp, QERR_UNDEFINED_ERROR);
return NULL;
}
- return r;
+ return g_memdup(r, *lenp);
}
uint32_t qemu_devtree_getprop_cell(void *fdt, const char *node_path,
@@ -208,7 +208,8 @@ uint32_t qemu_devtree_getprop_cell(void *fdt, const char
*node_path,
bool inherit, Error **errp)
{
int len;
- const uint32_t *p = qemu_devtree_getprop(fdt, node_path, property, &len,
+ uint32_t ret;
+ uint32_t *p = qemu_devtree_getprop(fdt, node_path, property, &len,
inherit, errp);
if (errp && *errp) {
return 0;
@@ -221,7 +222,9 @@ uint32_t qemu_devtree_getprop_cell(void *fdt, const char
*node_path,
error_set(errp, QERR_UNDEFINED_ERROR);
return 0;
}
- return be32_to_cpu(p[offset]);
+ ret = be32_to_cpu(p[offset]);
+ g_free(p);
+ return ret;
}
uint32_t qemu_devtree_get_phandle(void *fdt, const char *path)
diff --git a/device_tree.h b/device_tree.h
index c3f3b28..2bc188a 100644
--- a/device_tree.h
+++ b/device_tree.h
@@ -31,7 +31,7 @@ int qemu_devtree_setprop_string(void *fdt, const char
*node_path,
int qemu_devtree_setprop_phandle(void *fdt, const char *node_path,
const char *property,
const char *target_node_path);
-const void *qemu_devtree_getprop(void *fdt, const char *node_path,
+void *qemu_devtree_getprop(void *fdt, const char *node_path,
const char *property, int *lenp,
bool inherit, Error **errp);
uint32_t qemu_devtree_getprop_cell(void *fdt, const char *node_path,
--
1.7.0.4
- [Qemu-devel] [RFC v0 00/10] Microblaze generic FDT framework, Peter A. G. Crosthwaite, 2012/09/17
- [Qemu-devel] [RFC v0 01/10] device_tree: allow offsets for cell properties, Peter A. G. Crosthwaite, 2012/09/17
- [Qemu-devel] [RFC v0 02/10] device_tree: return Error* from prop getters, Peter A. G. Crosthwaite, 2012/09/17
- [Qemu-devel] [RFC v0 03/10] device_tree: allow property getters to inherit, Peter A. G. Crosthwaite, 2012/09/17
- [Qemu-devel] [RFC v0 04/10] device_tree: get_prop(): memdup returned properties,
Peter A. G. Crosthwaite <=
- [Qemu-devel] [RFC v0 05/10] qemu-coroutine: Add simple work queue support, Peter A. G. Crosthwaite, 2012/09/17
- [Qemu-devel] [RFC v0 08/10] pflash_cfi01: Added fdt generic platform support, Peter A. G. Crosthwaite, 2012/09/17
- [Qemu-devel] [RFC v0 09/10] microblaze_generic_fdt: first revision, Peter A. G. Crosthwaite, 2012/09/17
- [Qemu-devel] [RFC v0 07/10] fdt_generic: First revision, Peter A. G. Crosthwaite, 2012/09/17
- [Qemu-devel] [RFC v0 06/10] device_tree: Extended interface for fdt_generic, Peter A. G. Crosthwaite, 2012/09/17