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

9

Não tenho certeza do problema, mas estou falando do ataque ao kernel descrito aqui . Nesta lista de comentários, alguém perguntou sobre reniciar o processo. O truque não melhorou a situação (a máquina ainda funciona de maneira muito lenta) e o comentário em resposta diz algo sobre o espaço do kernel versus o espaço do usuário.

Primeiro, o comentário de resposta está correto? Se sim, 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 li , todos os programas iniciados por um usuário devem estar no espaço do usuário, o que eu perdi?

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

phunehehe
fonte

Respostas:

9

Existem serviços que um kernel fornece ao espaço do usuário (como abrir soquetes). Existe uma interface bem definida (API) na qual 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 os soquetes e enviando descritores de arquivos através deles e 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 não o faz - o fd vaza. Os arquivos vazados se acumulam e ficam lá consumindo recursos. Matar o programa não libera os recursos porque eles não pertencem ao programa.

Shawn J. Goff
fonte
6
E a razão pela qual o renice não ajuda é que afeta apenas o tamanho da parcela de tempo de CPU do usuário que um processo obtém. O tempo gasto no modo kernel não é contado para esse fim. De um modo geral, nice afeta apenas programas vinculados à CPU, não programas vinculados à IO. Aqui, o processo descontrolado é pura E / S, e nem realiza muitas chamadas do sistema, pois o problema é que cada chamada do sistema leva muito tempo.
Gilles 'SO- stop be evil'
1
@Gilles Desculpe por tocar em um problema tão antigo, mas parece muito interessante! Eu entendi direito, que algo como ionicefaria mais bem?
rozcietrzewiacz
@rozcietrzewiacz Eu também não acho que o ionice ajudaria, mas não tenho certeza. Devido ao erro, o processo passa o tempo todo em um único syscall, e o ionice não impede isso (eu acho).
Gilles 'SO- stop be evil' (