Pregunta

Yo sé / sbin / init tiene una protección especial contra SIGKILL y SIGSTOP del kernel por razones obvias.

He tratado núcleo revelador Quiero recibir SIGSTOP con ioctl () (similar a SIGABRT y SIGSEGV REQS en main ()):

if (ioctl (0, KDSIGACCEPT, SIGSTOP) == 0) {
    nih_signal_set_handler (SIGSTOP, stop_handler);

pero visita no llega a la stop_handler () (de lo que sé, como nih_error () no se imprime en logaritmos).

En stop_handler (), estoy restablecer el sighandler STOP para SIG_DFL (de lo contrario sería volver a nuestro manejador de todos modos), pero esto probablemente se lleva siendo ignorada por el kernel de nuevo.

¿Cómo le digo kernel Quiero tener init DETENIDO?

¿Fue útil?

Solución

que había necesidad de tomar la bandera SIGNAL_UNKILLABLE de banderas de signal_struct de su estructura de trabajo.

Por defecto (es decir, siempre en sistemas Linux sin modificar) SIGNAL_UNKILLABLE bandera se establece en las banderas signal_struct de init.

Se puede escribir un módulo del kernel que asoman init del struct tarea para cambiarlo, entonces sería capaz de enviar una señal de parada a init.

El envío de una señal de parada a init es una muy mala idea, aunque, como zombis podrían proliferar rápidamente si init no les estaba cosechando más.


Aclaración: Se trata de una estructura y no parte en el núcleo de la fuente de init, ni es accesible o visible desde el espacio de usuario. Para cambiarlo que había necesidad de escribir código kernel o parchear el kernel. Sería bastante trivial, imagino, para escribir un módulo del kernel que acaba de hacks él.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top