Por que um programa do usuário deve mexer no espaço do kernel?

8

Eu nem sei qual é o problema, mas estou falando sobre o ataque do kernel descrito aqui . Abaixo esta lista de comentários alguém perguntou sobre como renegociar o processo. O truque não melhorou a situação (a máquina ainda roda de forma muito lenta) e o comentário de resposta diz algo sobre o espaço do kernel versus o espaço do usuário.

Primeiro, o comentário de resposta está correto? Em caso afirmativo, por que o renice funciona para coisas no espaço do usuário e não para coisas no espaço do kernel? Além disso, de acordo com o que eu leio , todos os programas que um usuário inicia em si devem estar no espaço do usuário, o que eu perdi?

Se estiver incorreto, então por que a renice não melhora a situação?

    
por phunehehe 28.11.2010 / 18:25

1 resposta

8

Existem serviços que um kernel fornece ao usuário (como abrir sockets). Existe uma interface bem definida (API) que os programas de espaço do usuário podem interagir com o kernel.

Nesse caso, o programa de espaço do usuário está abrindo repetidamente soquetes e enviando descritores de arquivos por meio deles, fechando os soquetes. Essas ações são executadas pelo kernel. Ele manterá o descritor de arquivo em um buffer até que a outra extremidade do soquete o leia. O bug em particular é que um coletor de lixo deve eventualmente liberar o descritor de arquivo, mas isso não acontece - o fd é perdido. Os fds vazados se somam e ficam ali consumindo recursos. Matar o programa não libera os recursos porque eles não pertencem ao programa.

    
por 28.11.2010 / 18:59

Tags