1. A crash course on crash
The Kernel crash analysis tool
Rafael Aquini & Marcelo Mello
Fórum Internacional do Software Livre 12
Porto Alegre - RS - Brasil
1 A crash course on Crash – FISL 12
2. Agenda:
● O que é crash?
● Por que crash?
● Os requisitos para começar sua análise
● Lock n' load: o contexto do crash
● O conjunto de comandos
● Estudos de caso:
● Under the hood: Investigando o Kernel on-the-fly com
crash
● Dirty work: Caçando “NULL pointer dereference” em
device drivers
2 A crash course on Crash – FISL 12
3. O que é crash?
● Utilitário de análise imagens de memória do Kernel,
baseado no comando crash do UNIX SVR4,
significantemente melhorado após um 'merge'
completo com o GNU gdb debugger
● O “casamento” das duas ferramentas combina
efetivamente as capacidades de “source-level
debugging” do gdb com a natureza específica de
análise de Kernel do crash
● Projetado para ser independente de versão de Linux
● Upstream: http://people.redhat.com/anderson/
3 A crash course on Crash – FISL 12
4. Por que crash?
● Projetado com foco em flexibilidade e extensibilidade,
crash pode ter seu conjunto de comandos facilmente
extendido, para atender as necessidades mais
específicas de desenvolvedores e analistas;
● Pode ser utilizado para investigar as seguintes bases:
● Live Linux systems;
● Linux kernel core dumps criados com:
● kdump (makedumpfile, netdump, diskdump)
● xendump original, e ELF-format (XEN guests)
● virsh dump (KVM guests)
● IBM standalone core dump (s390, s390x)
● LKCD (Linux Kernel Crash Dumps) Sourceforge project
4 A crash course on Crash – FISL 12
5. Por que crash?
● Por você ser um sysadmin responsável;
● Porque você vai querer saber a causa do problema;
● Para coletar evidências (memória RAM é volátil);
Por que você não é fotógrafo!!
5 A crash course on Crash – FISL 12
6. Os requisitos para começar sua análise
6 A crash course on Crash – FISL 12
7. Os requisitos para começar sua análise
# yum install –enablerepo=fedora-debuginfo –enablerepo=updates-debuginfo
kexec-tools kernel-debuginfo crash
quantidade de memória reservada
# /etc/grub.conf início da região de memória reservada
kernel /vmlinuz-xxxx crashkernel=128M
crashkernel=128M@16M
# /etc/sysctl.conf
kernel.panic_on_oops = 1
# chkconfig kdump on
system-config-kdump
7 A crash course on Crash – FISL 12
8. Os requisitos para começar sua análise.
● Código-objeto do kernel:
● vmlinux obrigatoriamente de mesmo release do kernel que
gerou a imagem de memória, e compilado com a flag -g ––
assim possuindo os simbolos de debug
● Imagem de memória:
● Kernel crash dump (vmcore) criado por umas das ferramentas
citadas, ou acesso a /dev/mem em um live-system
● Plataforma e tipo de cpu:
● x86, x86_64, ia64, ppc64, arm, s390 e s390x
● Linux kernel:
● Compatibilidade assegurada de Red Hat 6.0 (2.2.5-12) até
RHEL6 (2.6.32+)
8 A crash course on Crash – FISL 12
9. Lock n' load: o contexto do crash
● Muitos comandos do crash são "context-sensitive";
● Após invocar uma sessão do crash, o contexto
corrente é determinado seguindo os critérios:
● Em dumpfiles:
● a tarefa que rodava quando die() die_nmi() foi chamada
● a tarefa que rodava quando panic() foi chamada
● a tarefa que rodava quando a interrupção de teclado ALT-
SYSRQ-c foi recebida
● a tarefa que rodava quando echo "c" > /proc/sysrq-
trigger foi emitido
● Em um “live-system”:
● a própria tarefa do crash
9 A crash course on Crash – FISL 12
11. O conjunto de comandos
● Display dos símbolos e estruturas do Kernel (gdb)
● struct; union; *; p; whatis; sym; dis;
● Estado do sistema (kernel-aware)
● bt; dev; files; fuser; irq; kmem; log; mach;
mod; mount; net; ps; pte; runq; sig; swap;
sys; task; timer; vm; vtop; waitq;
● Funções utilitárias (helpers)
● ascii; btop; eval; list; ptob; ptov; search;
rd; wr;
● Controle da sessão
● alias; exit; extend; foreach (bt, vm, task,
files, net, set, sig, vtop); gdb; repeat; set;
11 A crash course on Crash – FISL 12
12. Antes de arregaçar as mangas:
● Material de consulta:
● http://people.redhat.com/anderson/crash_whitepaper
● http://en.wikipedia.org/wiki/X86_assembly_language
● http://en.wikipedia.org/wiki/X86_architecture
● http://en.wikipedia.org/wiki/X86_instruction_listings
● http://en.wikipedia.org/wiki/X86-64
● Kernel source tree (source rpm)
● Cscope
● http://cscope.sourceforge.net/
12 A crash course on Crash – FISL 12
13. “Talk is cheap...
So, show me the code!”
Linus Torvalds
DEMO
13 A crash course on Crash – FISL 12
14. Obrigado!!
Dúvidas??
14 A crash course on Crash – FISL 12