]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
qobject: Protect against use-after-free in qobject_decref()
authorEric Blake <eblake@redhat.com>
Fri, 6 Nov 2015 06:35:27 +0000 (23:35 -0700)
committerMarkus Armbruster <armbru@redhat.com>
Mon, 9 Nov 2015 15:45:05 +0000 (16:45 +0100)
Adding an assertion to qobject_decref() will ensure that a
programming error causing use-after-free will result in
immediate failure (provided no other thread has started
using the memory) instead of silently attempting to wrap
refcnt around and leaving the problem to potentially bite
later at a harder point to diagnose.

Suggested-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
Message-Id: <1446791754-23823-4-git-send-email-eblake@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
include/qapi/qmp/qobject.h

index c856f553b7efb8873431cc03350cb63d16bda0d4..4b96ed5837212e18c62fbed10cab89668f99a14a 100644 (file)
@@ -90,6 +90,7 @@ static inline void qobject_incref(QObject *obj)
  */
 static inline void qobject_decref(QObject *obj)
 {
+    assert(!obj || obj->refcnt);
     if (obj && --obj->refcnt == 0) {
         assert(obj->type != NULL);
         assert(obj->type->destroy != NULL);