On Mon, Jul 15, 2013 at 7:37 AM, Dennis Jenkins <dennis.jenkins.75@gmail.com> wrote:
Ah ha!  I just learned about "gdb bt full".  The existing core dump might have what you need: Line #442.  However, the line numbers for the source code in the source tree that my Gentoo system is building from does not match exactly what you listed.

Line #442 for me is the one containing the "STREQ" macro:

    virObjectLock(mgr);

    for (i = 0; i < vm->nseclabels; i++) {
        for (j = 0; sec_managers[j]; j++)
            if (STREQ(vm->seclabels[i]->model, sec_managers[j]->drv->name))
                break;


I can rebuild with "-O0" and try again.  If I can still trigger the crash, the backtrace might have useful values for the optimized variables.  I'll post again in a few minutes.

On Mon, Jul 15, 2013 at 7:06 AM, Dennis Jenkins <dennis.jenkins.75@gmail.com> wrote:

On Mon, Jul 15, 2013 at 3:18 AM, Michal Privoznik <mprivozn@redhat.com> wrote:

Interesting. If you are still able to reproduce the crash, can you try to get the line number within virSecurityManagerGenLabel where the crash happened? I think it's the STREQ line (440 linenr). Question is whether model or name is NULL.



I'll try.

I'm not sure why GDB failed to list line numbers in the backtrace.  I will recompile libvirt with "-O0 -g3" and try again.



TL;DR: "vm->seclabels[i]->model" is NULL.


(gdb) bt full
#0  0x00007ffff6fc5d76 in __strcmp_sse42 () from /lib64/libc.so.6
No symbol table info available.
#1  0x00007ffff76e2ae2 in virSecurityManagerGenLabel (mgr=0x7fffe40bef20, vm=0x7fffd00097a0)
    at security/security_manager.c:442
        ret = -1
        i = 0
        j = 0
        sec_managers = 0x7fffd8003e60
        seclabel = 0x7ffff74c4911 <virAllocN+54>
        generated = false
        __FUNCTION__ = "virSecurityManagerGenLabel"
        __func__ = "virSecurityManagerGenLabel"



(gdb) list 436,450
436         if ((sec_managers = virSecurityManagerGetNested(mgr)) == NULL)
437             return ret;
438
439         virObjectLock(mgr);
440         for (i = 0; i < vm->nseclabels; i++) {
441             for (j = 0; sec_managers[j]; j++)
442                 if (STREQ(vm->seclabels[i]->model, sec_managers[j]->drv->name))
443                     break;
444
445             if (!sec_managers[j]) {
446                 virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
447                                _("Unable to find security driver for label %s"),
448                                vm->seclabels[i]->model);
449                 goto cleanup;
450             }

(gdb) frame 1
#1  0x00007ffff76e2ae2 in virSecurityManagerGenLabel (mgr=0x7fffe40bef20, vm=0x7fffd00097a0)
    at security/security_manager.c:442
442                 if (STREQ(vm->seclabels[i]->model, sec_managers[j]->drv->name))

(gdb) print vm->nseclabels
$1 = 1

(gdb) print sec_managers
$2 = (virSecurityManagerPtr *) 0x7fffd8003e60

(gdb) print sec_managers[0]
$3 = (virSecurityManagerPtr) 0x7fffe40bef20

(gdb) print vm->seclabels[i]->model
$4 = 0x0

(gdb) print sec_managers[j]->drv->name
$5 = 0x7ffff77729c0 "none"