Eu tenho dificuldade em analisar a causa desse segfault (firefox)

2

Quando executado dentro de um contêiner LXC mínimo (não privilegiado), segfaults do firefox (outros aplicativos gráficos funcionam bem).

Eu não consigo encontrar a causa exata desse segfault (que é provavelmente devido a permissões insuficientes ou falta de recursos).

# strace /usr/bin/firefox
...
open("/usr/lib/libfreebl3.so", O_RDONLY|O_CLOEXEC) = 26
read(26,"7ELF
# strace /usr/bin/firefox
...
open("/usr/lib/libfreebl3.so", O_RDONLY|O_CLOEXEC) = 26
read(26,"7ELF%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%>%pre%%pre%%pre%%pre%%pre%07%pre%%pre%%pre%%pre%%pre%%pre%"..., 832) = 832
fstat(26, {st_mode=S_IFREG|0755, st_size=544424, ...}) = 0
mmap(NULL, 2619144, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 26, 0) = 0x7f269bf1e000
mprotect(0x7f269bf97000, 2097152, PROT_NONE) = 0
mmap(0x7f269c197000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 26, 0x79000) = 0x7f269c197000
mmap(0x7f269c19a000, 14088, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f269c19a000
close(26)                               = 0
mprotect(0x7f269c197000, 8192, PROT_READ) = 0
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x20} ---
unlink("/home/root/.mozilla/firefox/xqa348dr.default/lock") = 0
close(6)                                = 0
rt_sigaction(SIGSEGV, {SIG_DFL, [], SA_RESTORER, 0x7f26bafb5e80}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [SEGV], NULL, 8) = 0 
tgkill(228, 228, SIGSEGV)               = 0
--- SIGSEGV {si_signo=SIGSEGV, si_code=SI_TKILL, si_pid=228, si_uid=0} ---
+++ killed by SIGSEGV (core dumped) +++
Segmentation fault (core dumped)
%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%>%pre%%pre%%pre%%pre%%pre%07%pre%%pre%%pre%%pre%%pre%%pre%"..., 832) = 832 fstat(26, {st_mode=S_IFREG|0755, st_size=544424, ...}) = 0 mmap(NULL, 2619144, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 26, 0) = 0x7f269bf1e000 mprotect(0x7f269bf97000, 2097152, PROT_NONE) = 0 mmap(0x7f269c197000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 26, 0x79000) = 0x7f269c197000 mmap(0x7f269c19a000, 14088, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f269c19a000 close(26) = 0 mprotect(0x7f269c197000, 8192, PROT_READ) = 0 --- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x20} --- unlink("/home/root/.mozilla/firefox/xqa348dr.default/lock") = 0 close(6) = 0 rt_sigaction(SIGSEGV, {SIG_DFL, [], SA_RESTORER, 0x7f26bafb5e80}, NULL, 8) = 0 rt_sigprocmask(SIG_UNBLOCK, [SEGV], NULL, 8) = 0 tgkill(228, 228, SIGSEGV) = 0 --- SIGSEGV {si_signo=SIGSEGV, si_code=SI_TKILL, si_pid=228, si_uid=0} --- +++ killed by SIGSEGV (core dumped) +++ Segmentation fault (core dumped)

Plano de fundo: o Firefox é executado em um contêiner LXC mínimo sem privilégios (sem init, não uma distribuição inteira, apenas o firefox e suas dependências) --- portanto, presumo que esse problema esteja relacionado a possivelmente insuficiente permissões ou recursos inexistentes que o Firefox precisa acessar. Dentro deste contêiner, programas gráficos triviais como 'xclock' e até mesmo programas acelerados por hardware como o trabalho 'glxgears'. Pode ser que a questão do firefox não funcionar esteja relacionada ao dbus (não sei se foi configurado corretamente - tudo o que fiz foi cp /etc/machine-id /container/etc/ ).

UPDATE: consegui resolver o problema. O container estava perdendo uma dependência do firefox (neste momento eu não posso dizer qual, porque eu peguei o meio caminho de montar todo o conteúdo do pacote nos containers rootfs).

UPDATE2: ainda estou interessado em saber como descobrir a causa exata do segfault acima.

    
por MCH 22.04.2016 / 01:27

0 respostas