On Mon, Jul 15, 2013 at 7:37 AM, Dennis Jenkins <dennis.jenkins.75(a)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(a)gmail.com
wrote:
>
>>
>> On Mon, Jul 15, 2013 at 3:18 AM, Michal Privoznik
<mprivozn(a)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"