En el núcleo de Linux 5.12 se ha incorporado el subsistema KFence para detectar errores en la gestión de la memoria

El núcleo de Linux 5.12, que se encuentra en desarrollo, incluye la implementación del mecanismo KFence (Kernel Electric Fence), que verifica la gestión de la memoria, detectando salidas fuera de límites de los búferes, accesos a la memoria después de su liberación y otros errores similares.

Esta funcionalidad ya estaba presente en el núcleo en forma de la opción de compilación KASAN (kernel address sanitizer, que utiliza Address Sanitizer en gcc y clang modernos), aunque se posicionaba principalmente para uso de depuración. La subsistema KFence se distingue de KASAN por su alta velocidad de operación, lo que permite utilizar esta funcionalidad incluso en núcleos de sistemas operativos en funcionamiento.

El uso en sistemas operativos permitirá detectar errores de gestión de memoria que no se manifiestan en pruebas y solo aparecen bajo cargas de trabajo o con el funcionamiento prolongado (con un alto tiempo de actividad). Además, la implementación de KFence en sistemas operativos permitirá aumentar significativamente el número de máquinas involucradas en la verificación del comportamiento del núcleo con la memoria.

Los mínimos costos operativos, independientes de la carga, se logran en KFence gracias a la inserción de páginas de protección (guard pages) en la memoria a intervalos fijos. Al expirar el tiempo del intervalo de protección, KFence agrega una nueva página de protección de un grupo de objetos de KFence mediante el sistema de asignación de memoria estándar (SLAB o SLUB allocator) y comienza un nuevo conteo de tiempo. Cada objeto KFence se coloca en una página de memoria separada, y las páginas de memoria en los límites izquierdo y derecho forman las páginas de protección, cuyo tamaño se elige al azar.

Así, las páginas con objetos están separadas entre sí por páginas de protección, que se configuran para generar "page fault" en cualquier acceso. Para detectar operaciones de escritura fuera de los límites del búfer dentro de las páginas con objetos, se utilizan además "zonas rojas" basadas en plantillas, que ocupan memoria no utilizada por los objetos, permaneciendo al alinear el tamaño de las páginas de memoria.

En caso de intentar acceder a un área fuera de los límites del búfer, la operación afecta a la página de protección, lo que provoca la generación de un «page fault», que es interceptado por KFence y registra información sobre el problema detectado. Por defecto, KFence no bloquea el error, solo emite una advertencia en el registro, pero existe una configuración denominada «panic_on_warn» que permite que, al detectarse un error, el núcleo cambie a un estado de fallo (panic).

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster