GNU/Linux >> Tutoriales Linux >  >> Linux

¿Qué es un kernel contaminado en Linux?

Cuando el núcleo está contaminado, significa que está en un estado que no es compatible con la comunidad . La mayoría de los desarrolladores del kernel ignorarán los informes de errores que involucran kernels contaminados, y los miembros de la comunidad pueden pedirle que corrija la condición contaminada antes de que puedan continuar con el diagnóstico de problemas relacionados con el kernel. Además, algunas funciones de depuración y llamadas a la API pueden desactivarse cuando el kernel está contaminado.

En la mayoría de los casos que involucran controladores patentados, puede ignorar con seguridad la condición corrupta , pero algunos escenarios que hacen que el núcleo se contamine pueden ser indicativos de problemas graves del sistema.

La función está destinada a identificar las condiciones que pueden dificultar la resolución adecuada de un problema del kernel. Por ejemplo, la carga de un módulo propietario puede hacer que la salida de depuración del kernel no sea confiable porque los desarrolladores del kernel no tienen acceso al código fuente del módulo y, por lo tanto, no pueden determinar qué pudo haberle hecho el módulo al kernel. Asimismo, si el núcleo había experimentado previamente una condición de error o si se había producido un error grave de hardware, la información de depuración generada por el núcleo puede no ser fiable.

El kernel puede contaminarse por varias razones , incluyendo (pero no limitado a) lo siguiente:

  • El uso de un módulo de kernel patentado (o no compatible con GPL):esta es la causa más común de kernels contaminados y, por lo general, resulta de la carga de controladores de video NVIDIA o AMD patentados
  • El uso de la puesta en escena controladores, que son parte del código fuente del kernel pero no se han probado por completo
  • El uso de fuera del árbol módulos que no están incluidos con el código fuente del kernel de Linux
  • Carga o descarga forzada de un módulo del kernel (como la inserción forzada de un módulo no creado para la versión actual del kernel)
  • El uso de un núcleo SMP (multiprocesador) en ciertas CPU monoprocesador no compatibles, principalmente procesadores AMD Athlon más antiguos
  • Anulación de ACPI DSDT, a veces necesaria para corregir errores de administración de energía (ver aquí para más detalles)
  • Ciertas condiciones de error críticas, como excepciones de verificación de la máquina y oopses del kernel
  • Ciertos errores graves en el firmware del sistema (BIOS, UEFI) que el kernel debe solucionar

Cada una de estas condiciones está representada por una bandera particular en el núcleo. Algunos proveedores de Linux, como SUSE, agregan indicadores de corrupción adicionales para indicar condiciones como la carga de un módulo que no es compatible con el proveedor.

Hay más información disponible en la documentación del núcleo. Las banderas de corrupción enumeradas allí son (con _ un sustituto de 'en blanco')

  • G|P :G si todos los módulos cargados tienen licencia GPL o compatible, en caso contrario se ha cargado un módulo propietario. Los módulos sin MODULE_LICENSE o con MODULE_LICENSE que insmod no reconoce como compatibles con GPL se supone que son propietarios.
  • F|_ :si algún módulo se cargó a la fuerza con "insmod -f", de lo contrario, si todos los módulos se cargaron normalmente.
  • E|_ :si el error ocurrió en un kernel SMP que se ejecuta en hardware que no ha sido certificado como seguro para ejecutar multiprocesador. Actualmente, esto ocurre solo en varios Athlons que no son compatibles con SMP.
  • D|_ :si un módulo fue descargado a la fuerza por rmmod -f , de lo contrario, si todos los módulos se descargaron normalmente.
  • M|_ :si algún procesador ha informado una Excepción de verificación de máquina, de lo contrario, no se han producido Excepciones de verificación de máquina.
  • B|_ :si una función de liberación de página ha encontrado una referencia de página incorrecta o algunos avisos de página inesperados.
  • E|_ :si un usuario o una aplicación de usuario solicitó específicamente que se establezca el indicador Tainted.
  • D|_ :si el kernel murió recientemente, es decir, hubo un OOPS o BUG.
  • A|_ :si la tabla ACPI ha sido anulada.
  • E|_ :si el kernel ha emitido previamente una advertencia (aunque algunas advertencias pueden establecer indicadores de contaminación más específicos).
  • C|_ :si se ha cargado un controlador de ensayo.
  • Yo|_ :si el núcleo está solucionando un error grave en el firmware de la plataforma (BIOS o similar).
  • O|_ :si se ha cargado un módulo construido externamente ("fuera del árbol").
  • E|_ :si se ha cargado un módulo sin firmar en una firma de módulo compatible con el núcleo.
  • E|_ :si anteriormente se ha producido un bloqueo suave en el sistema.
  • K|_ :si el kernel ha sido parcheado en vivo.

Linux
  1. Linux:¿cómo determinar qué módulo contamina el kernel?

  2. Linux:¿cómo recargar correctamente un módulo del kernel?

  3. ¿Qué hace que un servidor Kernel Linux sea fundamental?

  4. ¿Cuál es la diferencia entre module_init e init_module en un módulo del kernel de Linux?

  5. ¿Qué significa decir que el kernel de Linux es preventivo?

¿Qué es un usuario de Linux?

Cómo cargar o descargar un módulo del kernel de Linux

Comando Lsmod en Linux (Lista de módulos del kernel)

Comando Modprobe en Linux

Núcleo de Linux vs. Núcleo de Mac

Qué hacer en caso de pánico en el kernel de Linux