qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 13/28] qapi: fix potential segfault for visit_type_s


From: Michael Roth
Subject: [Qemu-devel] [PATCH 13/28] qapi: fix potential segfault for visit_type_size()
Date: Wed, 31 Oct 2012 17:35:57 -0500

visit_type_size() was added for use-cases currently only encountered by
OptsVisitor users, which implements a specific handler for
visit_type_size(). For Visitor implementations that don't implement the
handler, we fallback to using v->type_uint64().

However, some visitor implementations, such as Qmp*Visitor, also rely on
fallback code to handle visit_type_uint64() calls, and leave v->type_uint64
unset. This leads to a segfault when we try to use visit_type_size().

Fix this by calling the visit_type_uint64() function in visit_type_size()'s
fallback instead of calling v->type_uint64() directly.

Signed-off-by: Michael Roth <address@hidden>
---
 qapi/qapi-visit-core.c |    6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/qapi/qapi-visit-core.c b/qapi/qapi-visit-core.c
index 9a74ed0..dd28cb9 100644
--- a/qapi/qapi-visit-core.c
+++ b/qapi/qapi-visit-core.c
@@ -237,7 +237,11 @@ void visit_type_int64(Visitor *v, int64_t *obj, const char 
*name, Error **errp)
 void visit_type_size(Visitor *v, uint64_t *obj, const char *name, Error **errp)
 {
     if (!error_is_set(errp)) {
-        (v->type_size ? v->type_size : v->type_uint64)(v, obj, name, errp);
+        if (v->type_size) {
+            v->type_size(v, obj, name, errp);
+        } else {
+            visit_type_uint64(v, obj, name, errp);
+        }
     }
 }
 
-- 
1.7.9.5




reply via email to

[Prev in Thread] Current Thread [Next in Thread]