La sous-système KFence a été intégré au noyau Linux 5.12 pour détecter les erreurs de gestion de la mémoire.

Le noyau Linux 5.12 en cours de développement intègre la mise en œuvre du mécanisme KFence (Kernel Electric Fence), qui vérifie la gestion de la mémoire en détectant les débordements de tampon, les accès à la mémoire après libération et d'autres erreurs similaires.

Une fonctionnalité similaire était déjà présente dans le noyau sous forme d'option de compilation KASAN (kernel address sanitizer, utilisant Address Sanitizer dans les compilateurs modernes gcc et clang) — cependant, elle était principalement positionnée pour un usage de débogage. Le sous-système KFence se distingue de KASAN par sa vitesse d'opération élevée, ce qui permet d'utiliser cette fonctionnalité même dans les noyaux des systèmes de production.

L'utilisation dans les systèmes de production permettra de détecter des erreurs de gestion de la mémoire qui ne se manifestent pas lors des tests, mais qui apparaissent uniquement sous de fortes charges de travail ou après une longue période d'exécution (avec un uptime élevé). De plus, l'application de KFence dans les systèmes de production permettra d'augmenter considérablement le nombre de machines impliquées dans la vérification du fonctionnement du noyau avec la mémoire.

Des frais généraux minimaux, indépendants de la charge, sont atteints dans KFence grâce à l'insertion de pages de protection (guard pages) dans la mémoire par intervalles fixes. Après l'expiration du temps de l'intervalle de protection, KFence ajoute une nouvelle page de protection à partir du pool d'objets KFence via le système de distribution de mémoire standard (allocateur SLAB ou SLUB), et commence un nouveau compte à rebours. Chaque objet KFence est placé dans une page mémoire distincte, et les pages mémoire aux extrémités gauche et droite forment des pages de protection dont la taille est choisie de manière aléatoire.

Ainsi, les pages contenant des objets sont séparées par des pages de protection, qui sont configurées pour générer des « page fault » lors de tout accès. Pour identifier les opérations d'écriture en dehors du tampon à l'intérieur des pages avec des objets, des « zones rouges » basées sur des modèles sont également utilisées, occupant une mémoire non utilisée par les objets, résultant de l'alignement des tailles de pages mémoire. —+————+————+————+————+————+— | xxxxxxxxx | O : | xxxxxxxxx | : O | xxxxxxxxx | | xxxxxxxxx | B : | xxxxxxxxx | : B | xxxxxxxxx | | x GUARD x | J : RED- | x GUARD x | RED- : J | x GUARD x | | xxxxxxxxx | E : ZONE | xxxxxxxxx | ZONE : E | xxxxxxxxx | | xxxxxxxxx | C : | xxxxxxxxx | : C | xxxxxxxxx | | xxxxxxxxx | T : | xxxxxxxxx | : T | xxxxxxxxx | —+————+————+————+————+————+—

En cas de tentative d'accès à une zone en dehors des limites du tampon, l'opération concerne la page de protection, ce qui entraîne la génération d'une « page fault », interceptée par KFence, qui consigne les données sur le problème détecté dans les journaux. Par défaut, KFence ne bloque pas l'erreur et se contente d'afficher un avertissement dans les journaux, mais une configuration « panic_on_warn » est prévue, permettant de mettre le noyau dans un état de panne en cas d'erreur détectée.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster