On 04/10/2014 02:15 PM, Cole Robinson wrote: > On 04/10/2014 12:39 PM, Marcel Apfelbaum wrote: >> On Thu, 2014-04-10 at 18:24 +0200, Marcin Gibuła wrote: >>> W dniu 2014-04-10 15:43, Marcel Apfelbaum pisze: >>>> On Thu, 2014-04-10 at 14:55 +0200, Marcin Gibuła wrote: >>>>> Hi, >>>>> >>>>> I've been playing with QEMU 2.0-rc2 and found a crash that isn't there >>>>> in 1.7.1. >>>> Hi Marcin, >>>> Thanks for reporting the bug! >>>> >>>> Do you have a development environment? >>>> If you do, and the reproduction is fast (and you already have a setup), >>>> a git bisect to find the problematic commit would be appreciated, >>> >>> Hi, >>> >>> yes, it's on development environment. If you could point me to some >>> quick guide to bisecting qemu, I'll be happy to do it. >> >> Sure! Thanks for helping. >> >> 1. Start: >> git bisect start >> git bisect good <commit hash or tag name of the version that works> >> (Ex: v1.7.1) >> git bisect bad <commit hash or tag name of the non working version> >> (Ex: HEAD) >> 2. Git will checkout commits for you and you have to check and answer: >> git bisect good or git bisect bad >> 3. Git will show you the first bad commit. >> >> A more detailed version here: >> http://git-scm.com/book/en/Git-Tools-Debugging-with-Git >> Look for git-bisect. > > Actually I was just independently bisecting this :) Culprit is: > > commit 9561fda8d90e176bef598ba87c42a1bd6ad03ef7 > Author: Stefan Hajnoczi <stefa...@redhat.com> > Date: Wed Mar 19 08:58:55 2014 +0100 > > qom: Make QOM link property unref optional > > Simple reproducer: > > ./x86_64-softmmu/qemu-system-x86_64 -qmp unix:./qmp.sock,server > > ./scripts/qmp/qmp-shell ./qmp.sock > (QEMU) qom-list path=//machine/i440fx/pci.0/child[2] > > Seems like trying to qom-list any link property will crash >
I think this is the fix: diff --git a/qom/object.c b/qom/object.c index f4de619..9a730e7 100644 --- a/qom/object.c +++ b/qom/object.c @@ -1225,7 +1225,8 @@ Object *object_resolve_path_component(Object *parent, cons } if (object_property_is_link(prop)) { - return *(Object **)prop->opaque; + LinkProperty *lprop = prop->opaque; + return *lprop->child; } else if (object_property_is_child(prop)) { return prop->opaque; } else { The commit mentioned above changed the type of opaque for link properties, but forgot to update this site. I'll send a top level patch. - Cole