¿Por qué un programa de usuario debería meterse con el espacio del kernel?

9

Ni siquiera estoy seguro de cuál es el problema, pero estoy hablando del ataque al núcleo que se describe aquí . Abajo de esta lista de comentarios, alguien preguntó sobre reencauzar el proceso. El truco no mejoró la situación (la máquina todavía funciona de una manera muy lenta) y el comentario de respuesta dice algo sobre el espacio del kernel versus el espacio del usuario.

Primero, ¿es correcto el comentario de respuesta? Si es así, ¿por qué renice funciona para cosas en el espacio del usuario y no para cosas en el espacio del kernel? Además, de acuerdo con lo que leí , todos los programas que un usuario inicia por sí mismo deberían estar en el espacio del usuario, ¿qué me perdí?

Si es incorrecto, ¿por qué Renice no mejora la situación?

phunehehe
fuente

Respuestas:

9

Hay servicios que un núcleo proporciona al espacio de usuario (como abrir sockets). Hay una interfaz bien definida (API) a través de la cual los programas de espacio de usuario pueden interactuar con el núcleo.

En este caso, el programa de espacio de usuario abre repetidamente sockets y envía descriptores de archivos a través de ellos, luego cierra los sockets. Estas acciones son realizadas por el núcleo. Mantendrá el descriptor de archivo en un búfer hasta que el otro extremo del socket lo lea. El error particular es que un recolector de basura eventualmente debería liberar el descriptor de archivo, pero no lo hace: el fd se filtra. Los fds filtrados se acumulan y se quedan allí consumiendo recursos. Matar el programa no libera los recursos porque no son propiedad del programa.

Shawn J. Goff
fuente
66
Y la razón por la que renice no ayuda es que solo afecta la cantidad de tiempo de CPU de usuario que obtiene un proceso. El tiempo empleado en modo kernel no se cuenta para este propósito. En términos generales, nice solo afecta a los programas vinculados a la CPU, no a los programas vinculados a IO. Aquí, el proceso descontrolado es IO puro, y ni siquiera realiza tantas llamadas al sistema, ya que el error es que cada llamada al sistema lleva demasiado tiempo.
Gilles 'SO- deja de ser malvado'
1
@Gilles Perdón por tocar un tema tan antiguo, ¡pero parece muy interesante! ¿Lo entiendo bien, que algo así ioniceharía más bien?
rozcietrzewiacz
@rozcietrzewiacz No creo que el ionice ayude tampoco, pero no estoy seguro. Debido al error, el proceso pasa todo su tiempo en una sola llamada al sistema, y ​​el ionice no lo impedirá (creo).
Gilles 'SO- deja de ser malvado'