summaryrefslogtreecommitdiff
path: root/qom
diff options
context:
space:
mode:
authorPeter Crosthwaite <peter.crosthwaite@xilinx.com>2013-05-22 11:19:16 +1000
committerMichael Roth <mdroth@linux.vnet.ibm.com>2013-06-11 16:47:52 -0500
commit3541912190ab24dac4b8e4edc41570b5ca1906e5 (patch)
treec9e5973bfc7d86f515f396fa19e28274ecf107a5 /qom
parent749806d1a741d23181e5c8f807c411868384b122 (diff)
downloadqemu-3541912190ab24dac4b8e4edc41570b5ca1906e5.tar.gz
qemu-3541912190ab24dac4b8e4edc41570b5ca1906e5.tar.bz2
qemu-3541912190ab24dac4b8e4edc41570b5ca1906e5.zip
qom/object: Don't poll cast cache for NULL objects
object_dynamic_cast_assert used to be tolerant of NULL objects and not assert. It's clear from the implementation that this is the expected behavior. The preceding check of the cast cache dereferences obj however causing a segfault. Fix by conditionalizing the cast cache logic on obj being non-null. Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com> Reviewed-by: Andreas Färber <afaerber@suse.de> Reviewed-by: Anthony Liguori <aliguori@us.ibm.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Edgar E. Iglesias <edgar.iglesias@gmail.com> Message-id: 8e2bef6a55753869c50bfa32226f7fcf0439ca62.1369183592.git.peter.crosthwaite@xilinx.com Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> (cherry picked from commit 95916abcf428fb03644468c7fbce64356c6483c0) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
Diffstat (limited to 'qom')
-rw-r--r--qom/object.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/qom/object.c b/qom/object.c
index ec88231fa9..803b94bb66 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -442,7 +442,7 @@ Object *object_dynamic_cast_assert(Object *obj, const char *typename,
int i;
Object *inst;
- for (i = 0; i < OBJECT_CLASS_CAST_CACHE; i++) {
+ for (i = 0; obj && i < OBJECT_CLASS_CAST_CACHE; i++) {
if (obj->class->cast_cache[i] == typename) {
goto out;
}
@@ -458,7 +458,7 @@ Object *object_dynamic_cast_assert(Object *obj, const char *typename,
assert(obj == inst);
- if (obj == inst) {
+ if (obj && obj == inst) {
for (i = 1; i < OBJECT_CLASS_CAST_CACHE; i++) {
obj->class->cast_cache[i - 1] = obj->class->cast_cache[i];
}