kGraft es una característica del núcleo Linux que implementa la aplicación de parches en vivo de un kernel en ejecución, lo que permite que se apliquen parches del kernel mientras el kernel aún se está ejecutando. Al evitar la necesidad de reiniciar el sistema con un nuevo núcleo que contiene los parches deseados, kGraft apunta a maximizar el tiempo de actividad y disponibilidad del sistema. Al mismo tiempo, kGraft permite que las actualizaciones de seguridad relacionadas con el kernel se apliquen sin diferirlas a los tiempos de inactividad programados.[1][2]​ Internamente, kGraft permite que se reemplacen funciones completas en un kernel en ejecución con sus versiones parcheadas, haciendo esto de forma segura mediante el uso selectivo de las versiones originales de las funciones para asegurar la consistencia del proceso mientras se realiza la aplicación de parches en vivo.[3]

KGraft
Información general
Tipo de programa software libre
Desarrollador SUSE
Licencia GNU General Public License
Información técnica
Programado en C
Enlaces

kGraft es desarrollado por SUSE, con su código fuente bajo los términos de las versiones dos y tres de la Licencia Pública General de GNU (GPL).[2][4]​ En abril de 2014, se envió kGraft para su inclusión en la línea principal del núcleo Linux,[3]​ y los fundamentos minimalistas para la aplicación de parches en vivo se fusionaron en la línea principal del núcleo Linux en la versión 4.0 del kernel, que se publicó el 12 de abril de 2015, en conjunto con kpatch.[5]

Internos

editar

Internamente, kGraft consta de dos partes.  – el módulo núcleo del kernel ejecuta el mecanismo de parcheo en vivo al alterar el funcionamiento interno del kernel, mientras que las utilidades del espacio de usuario preparan módulos individuales de kernel de parches en vivo desde las fuentes. El parche en vivo del kernel se realiza en el nivel de la función, lo que significa que kGraft puede reemplazar funciones completas en el kernel en ejecución con sus versiones parcheadas, mientras que depende de los mecanismos y la infraestructura establecidos por ftrace para "enrutar" las versiones antiguas de las funciones. No es posible realizar cambios en las estructuras de datos internas del kernel; sin embargo, los parches de seguridad, que son uno de los candidatos naturales para ser utilizados con kGraft, rara vez contienen cambios en las estructuras de datos del kernel.[2][3][6]

Al aplicar parches activos, kGraft no requiere que se detenga un kernel en ejecución para que se introduzcan en él versiones parcheadas de funciones. En lugar de reemplazar las funciones de forma atómica, kGraft proporciona "vistas del mundo" (o "universos") consistentes a los procesos del espacio de usuario, a los hilos del núcleo y a los controladores de interrupciones, que se monitorean durante su ejecución para que se puedan seguir utilizando las versiones originales de las funciones del núcleo parcheadas. Para lograrlo, kGraft mantiene las versiones originales de las funciones parcheadas en forma de lectura-copia-actualización (RCU), y selecciona dinámicamente entre las versiones original y parcheada según el proceso, el hilo del kernel o el controlador de interrupciones que las ejecuta. Más específicamente, las versiones originales de funciones se siguen utilizando en el momento cuando se aplica un parche en vivo para los procesos ejecutando actualmente en el espacio del núcleo, para los hilos del núcleo hasta que alcanzan el punto de terminación, y para que se ejecuta actualmente interrupción manipuladores[2][3][7][8]

Debido a su diseño, kGraft no introduce latencia adicional al aplicar parches en vivo. Como inconveniente, las versiones originales de las funciones del kernel parcheadas pueden ser mantenidas durante largos períodos de tiempo en caso de que haya procesos que permanezcan demasiado tiempo dentro del espacio del kernel; por ejemplo, un proceso puede esperar la E/S en un socket de red. Además, como las versiones originales y parcheadas de las funciones pueden ejecutarse en paralelo, pueden surgir problemas si utilizan las estructuras de datos internas del kernel de diferentes maneras.[3][8]

"Vistas mundiales" o "universales", mantenidas por kGraft en una estructura copy-on-write[2]: 14, 15, 17 
Sin una lógica adicional en su lugar, no reemplazar las funciones parcheadas atómicamente podría llevar a inconsistencias.
Cada proceso se supervisa, por lo que ejecuta una función parcheada de forma consistente dentro de una sola llamada al sistema.
Después de que todo migra a un nuevo "universo", ya no se necesitan controles de estilo.

Historia

editar

SUSE anunció kGraft en enero de 2014[9]​ y lo lanzó públicamente en marzo de 2014 bajo los términos de la versión de Licencia Pública General de GNU   2 (GPLv2) para la parte del kernel, y bajo los términos de la versión 3 (GPLv3 ) para la parte del espacio de usuario.[1][4]​ Se lanzó poco después de que Red Hat lanzó su propia implementación de parches en vivo del kernel llamada kpatch.[10]​ kGraft pretende fusionarse en la línea principal del núcleo Linux, y se presentó para su inclusión en abril de 2014.[3][8]

kGraft se puso a disposición de SUSE Linux Enterprise Server 12 el 18 de noviembre de 2014, como una característica adicional llamada SUSE Linux Enterprise Live Patching.[11][12]

Fundamentos minimalistas para la aplicación del parche en vivo del kernel se fusionaron en la línea principal del núcleo Linux en la versión del kernel 4.0, que se lanzó el 12 de abril de 2015. Esos fundamentos, basados principalmente en la funcionalidad ftrace del kernel, forman un núcleo común capaz de soportar parches en vivo tanto por kGraft como por kpatch, al proporcionar una interfaz de programación de aplicaciones (API) para los módulos del kernel que contienen parches y una interfaz binaria de aplicaciones (ABI) para las utilidades de gestión del espacio de usuario. Sin embargo, el núcleo común incluido en el núcleo Linux 4.0 solo es compatible con la arquitectura x86 y no proporciona ningún mecanismo para garantizar la coherencia a nivel de la función mientras se aplican los parches activos.[5][13][14]

Desde abril de 2015, se está trabajando en la migración de kGraft a línea principal del núcleo Linux.[14]​ Sin embargo, la implementación de los mecanismos de coherencia de nivel de función requeridos se ha retrasado porque las pilas de llamadas proporcionadas por el núcleo Linux pueden ser poco confiables en situaciones que involucran código de ensamblaje sin marcos de pila adecuados; como resultado, el trabajo de portabilidad continúa en curso a. En un intento por mejorar la confiabilidad de las pilas de llamadas del kernel, una verificación de la sanidad especializada. En un intento por mejorar la confiabilidad de las pilas de llamadas del kernel, una verificación de sanidad especializada llamada stacktool también ha sido desarrollada.[15][16]

Véase también

editar
  • Actualización dinámica de software, un campo de investigación centrado en actualizar programas mientras se ejecutan
  • kexec, un método para cargar un núcleo Linux completamente nuevo desde un sistema en ejecución
  • Ksplice y KernelCare, otras tecnologías de parches en vivo del núcleo Linux desarrolladas por Ksplice, Inc. (más tarde adquiridas por Oracle) y CloudLinux, respectivamente

Referencias

editar
  1. a b «SUSE Releases kGraft for Live Patching of Linux Kernel». SUSE. 2014-03-27 de mdy. Consultado el 2014-11-07 de mdy. 
  2. a b c d e Vojtech Pavlík (2014-03-28 de mdy). «kGraft: Live patching of the Linux kernel» (PDF). linuxfoundation.org. Archivado desde el original el 3 de julio de 2014. Consultado el 2014-11-07 de mdy. 
  3. a b c d e f Jonathan Corbet (2014-04-30 de mdy). «The initial kGraft submission». LWN.net. Consultado el 2014-11-07 de mdy. 
  4. a b Chris Duckett (2014-02-04 de mdy). «Suse's kGraft looks to put live kernel patching back into Linux». ZDNet. Consultado el 2014-11-07 de mdy. 
  5. a b «Linux kernel 4.0, Section 1.2. Live patching». kernelnewbies.org. 2015-04-26 de mdy. Consultado el 2015-04-27 de mdy. 
  6. Vojtech Pavlík (2014-01-31 de mdy). «kGraft: Live Kernel Patching». suse.com. Consultado el 2014-11-07 de mdy. 
  7. Libby Clark (2014-03-04 de mdy). «SUSE Labs Director Talks Live Kernel Patching with kGraft». linux.com. Archivado desde el original el 10 de marzo de 2016. Consultado el 2014-11-07 de mdy. 
  8. a b c Michael Larabel (2014-05-01 de mdy). «SUSE Posts kGraft, Red Hat Posts Kpatch Patches». Phoronix. Consultado el 2014-11-07 de mdy. 
  9. «SUSE Develops kGraft for Live Patching of Linux Kernel». SUSE. 2014-01-31 de mdy. Consultado el 2014-12-28 de mdy. 
  10. Josh Poimboeuf (2014-02-26 de mdy). «Introducing kpatch: Dynamic Kernel Patching». redhat.com. Consultado el 2015-02-11 de mdy. 
  11. «SUSE Linux Enterprise Live Patching Now Available». SUSE. 2014-11-18 de mdy. Consultado el 2014-11-23 de mdy. 
  12. Sean Michael Kerner (2014-11-18 de mdy). «SUSE Brings Live Patching and Ceph Storage to Its Enterprise Linux». serverwatch.com. Archivado desde el original el 18 de julio de 2019. Consultado el 2014-11-23 de mdy. 
  13. Jonathan Corbet (2015-02-25 de mdy). «A rough patch for live patching». LWN.net. Consultado el 2015-04-27 de mdy. 
  14. a b «Linux kernel source tree: kernel/git/torvalds/linux.git: Pull live patching infrastructure from Jiri Kosina». kernel.org. 2015-02-11 de mdy. Consultado el 2015-04-27 de mdy. 
  15. Jonathan Corbet (2015-09-30 de mdy). «Compile-time stack validation». LWN.net. Consultado el 2015-10-02 de mdy. 
  16. Josh Poimboeuf (2015-09-24 de mdy). «Linux kernel documentation: Documentation/stack-validation.txt (from the v13 patch)». LWN.net. Consultado el 2015-10-02 de mdy. 

Enlaces externos

editar