Patch de Live Kernel Linux - WHATIS e HOWTO? [fechadas]

1

Estou tentando entender um novo conceito que conheci recentemente quando o Linux 4.0 abre caminho para a linha principal - "Live Patching".

Supostamente este é um novo aprimoramento de recursos do kernel do Linux. Foi desenvolvido pela primeira vez de forma independente pela Red Hat e pela Open SUSE há cerca de um ano.

Eu sei, quaisquer desenvolvimentos de recursos / correções de bugs são geralmente implementados no kernel do Linux via patches, ou seja, você aplica o patch para a versão do kernel do Linux, Re-Compile the Kernel Source e instala através dos métodos usuais de $make;sudo make install .

A parte interessante do mecanismo supostamente "live patching" é que você não terá que re-compilar e instalar uma nova versão do kernel. Quero dizer, o seu GRUB não mostrará uma entrada para uma versão mais recente do kernel, porque você não fez a instalação.

Agora, este é um conceito sério para digerir para mim. Como é possível mesmo ?, Como isso seria implementado?.

A Red Hat e o Open SUSE usam o Kpatch e o kGraft, respectivamente, para implementá-lo.

Eu gostaria de experimentar um módulo simples do kernel e usar um dos Kpatch ou kGraft para implementá-lo. Mas eu tenho um sistema Ubuntu 14.04, alguma alternativa para o Ubuntu?

O mais próximo que cheguei de entender este novo conceito é que você precisaria escrever e compilar o patch em um novo framework (como o ftrace). Então, você teria a API / ABI do espaço de usuário apenas redirecionada do módulo de kernel "defeituoso" para a implementação API / ABI mais recente que você acabou de instalar usando esse patch (como um "apenas" instalaria um patch que é construído em um quadro especial?). Eu estou bem aqui?

Se alguém que é especialista em kernel do Linux sabe disso, eu adoraria ouvir de você o que é esse "live patching" e como é possível criar um patch ao vivo e como o usuário do patch sistema, instalar este patch e verificar sua funcionalidade (testá-lo)?

Além de entender esse conceito, gostaria de saber como programar um "patch" ao vivo ?. E que ambiente todo eu precisaria fazer também?

    
por Yusuf Husainy 01.04.2015 / 14:25

1 resposta

2

Se o kernel não é uma reescrita completa (com nomes de função alterados etc, reordenação de parâmetros passados para funções), você pode analisar os binários do kernel original e do kernel corrigido, e ver quais funções foram alteradas.

Depois, você sobrescreve o início de uma rotina alterada para ir para uma versão alterada da rotina que você carregou na memória. Isso é feito enquanto nenhum outro processo está sendo executado.

O artigo da Wikipédia sobre ksplice explica isso mais detalhadamente de uma maneira compreensível.

Você pode, claro, tentar programar um patch e criar pequenos patches (com algumas linhas de código de máquina, em vez de funções completas). Esses patches menores exigem que você salte de volta na rotina original, em vez de apenas retornar da chamada de função corrigida.

Corrigir o menu grub para ter um novo número de versão é fácil comparado à análise e correção dos binários do kernel. Esse menu é apenas texto. Mas a ideia é que você nunca verá o menu grub após a primeira inicialização de qualquer maneira.

Este pode ser um novo recurso no Red Hat e no Open SuSE, mas não foi inventado há apenas um ano, por exemplo, O ksplice começou a consertar os kernels em execução em 2008. O conceito de consertar um programa (não necessariamente o kernel do Linux) na memória é muito mais antigo. Eu usei patching de programas na memória com base na análise manual eu mesmo em 1984 (remendo o código de máquina do 6502), e eu certamente não tive a ideia de fazer isso eu mesmo naquela época.

    
por 02.04.2015 / 07:53