Como verificar se o kernel Linux atualmente foi carregado com o kexec?

7

Ao verificar, quero dizer algo bastante sólido, i. e., tentar analisar a configuração do carregador ou os arquivos do kernel disponíveis e corresponder à saída do uname claramente não é uma opção.

    
por poige 01.07.2016 / 06:54

2 respostas

6

No caso geral, não, não é possível, porque nada do estado anterior pode ser confiável e não pode ser distinguido de uma reinicialização regular.

Apenas diga, por exemplo, que você tem um sistema que NÃO limpa a RAM na inicialização (a limpeza da memória na inicialização é necessária por algumas especificações de inicialização segura, etc.); O processo de inicialização inicial e todas as reinicializações normais geralmente ocorrem nos mesmos deslocamentos e limpam tudo, desde a inicialização anterior ao longo do tempo. O próprio kernel quase sempre será carregado no mesmo endereço.

Agora considere o kexec em vez de uma reinicialização normal, e perceba que tudo deve acabar com os mesmos deslocamentos e ser indistinguível.

Existem casos especiais em que o kexec CAN pode ser detectado? SIM!

  • O Kdump carrega explicitamente o novo kernel em um endereço diferente e espera preservar a memória do kernel anterior para capturar erros estado.
  • Se o BIOS e o kernel inicializarem o hardware de forma diferente, (obviamente) pode ser notado, já que haveria mudanças em cada inicialização com a opção "usual / kexec".
  • Como um exemplo específico disso, o buffer de quadros EFI é definitivamente alterado pelo kernel durante a inicialização, e nunca retorna ao original estado em kexec.
  • O corolário disso é que, se você não controlar a inicialização do kernel kexec'd, e ele toca o hardware, não há praticamente nenhuma maneira para depois decidir se era uma inicialização real ou uma inicialização kexec .

Como uma demonstração, inicializei uma VM com um kernel, capturei o dmesg, então imediatamente fiz um hard kexec nele, capturei o dmesg novamente. Aqui está a diferença entre as duas execuções do dmesg: link

    
por 08.07.2016 / 01:29
-1
cat /sys/kernel/kexec_loaded

    
por 07.07.2016 / 23:02

Tags