[libvirt] [PATCH] qemu: Fix crash in qemucapsprobe

Jiri Denemark jdenemar at redhat.com
Tue Sep 27 14:43:15 UTC 2016


On Tue, Sep 27, 2016 at 08:25:05 -0400, John Ferlan wrote:
> 
> 
> On 09/27/2016 07:47 AM, Jiri Denemark wrote:
> > The qemucapsprobe helper calls virQEMUCapsInitHostCPUModel with
> > caps == NULL, causing the following crash:
> > 
> >     Program received signal SIGSEGV, Segmentation fault.
> >     #0  0x00007ffff788775f in virQEMUCapsInitHostCPUModel
> >         (qemuCaps=qemuCaps at entry=0x649680, host=host at entry=0x10) at
> >         src/qemu/qemu_capabilities.c:2969
> >     #1  0x00007ffff7889dbf in virQEMUCapsNewForBinaryInternal
> >         (caps=caps at entry=0x0, binary=<optimized out>,
> >         libDir=libDir at entry=0x4033f6 "/tmp", cacheDir=cacheDir at entry=0x0,
> >         runUid=runUid at entry=4294967295, runGid=runGid at entry=4294967295,
> >         qmpOnly=true) at src/qemu/qemu_capabilities.c:4039
> >     #2  0x0000000000401702 in main (argc=2, argv=0x7fffffffd968) at
> >         tests/qemucapsprobe.c:73
> > 
> > Signed-off-by: Jiri Denemark <jdenemar at redhat.com>
> > ---
> >  src/qemu/qemu_capabilities.c | 3 ++-
> >  1 file changed, 2 insertions(+), 1 deletion(-)
> > 
> 
> Earlier in this function there's:
> 
>     if (!cacheDir)
>         rv = 0;
>     else if ((rv = virQEMUCapsInitCached(caps, qemuCaps, cacheDir)) < 0)
>         goto error;
> 
> 
> virQEMUCapsInitCached will call virQEMUCapsLoadCache which will call
> virQEMUCapsInitHostCPUModel(qemuCaps, &caps->host); as well.

Well, this cannot happen if caps == NULL.

> So wouldn't it better to have virQEMUCapsInitHostCPUModel take "caps" as
> the parameter and then return "silently" if !caps->host ?

But this is the way I should have fixed it, since it will work better
with future changes.

Jirka




More information about the libvir-list mailing list