Como causar o kernel panic com um único comando?

50

É possível causar um kernel panic com uma única linha de comando?

Qual seria o comando mais simples para um usuário sudoing e o que seria para um usuário comum, se houver?

Cenários que sugerem baixar algo como parte do comando não contam.

    
por Desmond Hume 26.02.2013 / 20:02

7 respostas

71

FreeBSD:

sysctl debug.kdb.panic=1

Linux (mais informações aqui ):

echo c > /proc/sysrq-trigger
    
por 26.02.2013 / 21:20
17
mkdir /tmp/kpanic && cd /tmp/kpanic && printf '#include <linux/kernel.h>\n#include <linux/module.h>\nMODULE_LICENSE("GPL");static int8_t* message = "buffer overrun at 0x4ba4c73e73acce54";int init_module(void){panic(message);return 0;}' > kpanic.c && printf 'obj-m += kpanic.o\nall:\n\tmake -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules' > Makefile && make && insmod kpanic.ko

Compila um módulo que trave o kernel chamando a função panic , precisa de raiz, requer make e gcc

Substitua o "buffer overrun em 0x4ba4c73e73acce54" no comando por algo interessante para mais drama.

    
por 17.01.2016 / 21:48
7

O kernel deve continuar rodando, não importa o quê. Então, qualquer maneira de causar um pânico do kernel por interação com o usuário (diferente do vandalismo deliberado pela raiz poderosa, como Bruce Ediger propõe, e a maioria dos kernels são construídos para que a maioria dessas brincadeiras não funcione em primeiro lugar) é um extremamente bug sério, que seria consertado rapidamente.

    
por 26.02.2013 / 20:40
1

compila o seguinte código em um módulo e insmod ele, com certeza você deve entrar em pânico:

static int crash_module_init(void)

{
     printf("crash module starting\n");
     int *p = 0;

     printk("%d\n", *p);

     return 0;
}

static void crash_module_exit(void)
{
    printf("crash module exiting\n");
}

module_init(crash_module_init);
module_exit(crash_module_exit);
    
por 14.03.2013 / 12:35
1

Eu não sei porque isso não foi mencionado antes ...

sudo kill -9 1

Panics com a mensagem "tentou matar o init".

    
por 19.04.2018 / 21:27
1

O mais fácil é manter pressionada a tela alt + print (sysrq) e pressionar c enquanto ainda os mantém Faz o mesmo que echo c > /proc/sysrq-trigger Uma pequena explicação: a chave sysrq é usada para enviar comandos de baixo nível para o próprio kernel, como último recurso para tentar salvar o sistema. Se você mantiver pressionada a tela alt + print (sysrq) e pressionar outra tecla próxima a ela, ela fará o mesmo que se você fizesse eco da tecla no arquivo sysrq-trigger. Eles chamam de gatilho por uma razão; O 'c' diz ao kernel para travar (causar um kernel panic)

No entanto, você pode querer ver o conteúdo de 'proc / sys / kernel / sysrq'. Se é 178 ou qualquer outra coisa, você deve alterá-lo para 1. 0 está todo desativado, 1 está todo ativado e qualquer coisa maior que 1 é um bitmap para as coisas específicas que o kernel permite fazer com o sysrq.

    
por 07.05.2018 / 08:57
-1

Tente isto:

dd if=/dev/urandom of=/proc/sysrq-trigger 


Isso fez um pânico muito rápido no kernel para mim, mas não tenho certeza de quão seguro o processo é porque eu fiz isso na instalação do Ubuntu ao vivo. Mas o kernel fez mensagens de erro de spam quando eu fiz isso no ambiente de terminal puro.

    
por 24.11.2018 / 22:53