Google a découvert des centaines de conditions de course dans le noyau Linux en utilisant KCSAN

Linux Kernel

Ingénieurs Google qui contribuent au noyau Linux ont annoncé avoir découvert des centaines de "conditions de course", dans le noyau utilisant KCSAN. La société travaille depuis longtemps sur AddressSanitizer pour trouver des erreurs liées à la corruption de la mémoire ou UndefinedBehaviorSanitizer pour un comportement indéfini dans le code.

Cette fois, Google propose un nouveau détecteur de «conditions de course» pour le noyau Linux appelé KCSAN (Kernel Concurrency Sanitizer). Ces vulnérabilités critiques ne sont pas nouvelles. En fait, le Les conditions de concurrence se produisent lorsque deux ou plusieurs threads dans le même processus accèdent simultanément au même emplacement mémoire, où au moins un des accès est d'écrire, et lorsque les threads n'utilisent pas de verrous exclusifs pour contrôler leur accès à cette mémoire.

Lorsque ces conditions sont remplies, l'ordre d'accès n'est pas déterministe et le calcul peut donner des résultats différents d'une exécution à l'autre en fonction de cet ordre.

Les conditions de course sont de plus en plus considérées comme des erreurs d'accès simultanées et sont difficiles à reproduire et diagnostiquer dans des programmes parallèles. Le noyau Linux est un système logiciel à grande échelle, dans lequel le parallélisme intensif en threads et l'entrelacement de threads non déterministe sont plus soumis à des conditions concurrentielles.

Certaines situations de compétition peuvent être bénignes, mais bon nombre d'entre elles identifiées jusqu'à présent sont considérées comme des erreurs.

Le noyau Linux fournit plusieurs mécanismes pour éviter et gérer ces types de conditions Puisqu'il existe des outils tels que Thread Analyzer ou KTSAN (Kernel Thread Sanitizer) pour détecter les erreurs d'exécution critiques dans le noyau Linux.

Cependant, Google, qui contribue également au noyau Linux, a récemment proposé KCSAN, un nouveau détecteur de conditions de course pour le noyau, similaire à KTSAN.

Selon Google, KCSAN se concentre sur la découverte de situations concurrentielles dans le code du noyau. Ce détecteur de coup critique dynamique est une alternative au Kernel Thread Sanitizer (KTSAN).

Selon l'explication de Google, KCSAN est basé sur des points de surveillance d'échantillonnage, contrairement au détecteur KTSAN, qui est un détecteur de course critique avant l'événement. Les priorités clés de la conception KCSAN sont le manque de faux positifs, l'évolutivité et la simplicité.

KCSAN utilise des outils de compilation pour accéder à la mémoire. KCSAN est compatible avec les compilateurs GCC et Clang. Avec GCC, il nécessite la version 7.3.0 ou ultérieure et avec Clang, la version 7.0.0 ou ultérieure.

Sur la page GitHub du projetMarco Elver de Google a écrit qu'en utilisant KCSAN lors de tests le mois dernier, ils ont trouvé en seulement deux jours plus de 300 situations de compétition uniques dans le noyau. KCSAN fournit plusieurs options de configuration pour personnaliser son comportement.

«Nous utilisons KCSAN via Syzkaller depuis plusieurs semaines et nous avons trouvé de nombreux bugs. Au départ, en septembre 2019, nous avons identifié plus de 300 situations de compétition uniques en seulement deux jours », écrit-il.

Google a déclaré que l'approche générale est basée sur DataCollider, un autre détecteur dynamique de situations concurrentielles dans les modules du noyau. Mais contrairement à DataCollider, KCSAN n'utilise pas de points de surveillance matériels, mais s'appuie sur des outils de compilation.

Les points de surveillance sont mis en œuvre à l'aide d'un codage efficace qui stocke le type, la taille et l'adresse d'accès dans un long fichier. Les avantages de l'utilisation de points de surveillance flexibles sont la portabilité et une plus grande flexibilité dans la limitation de l'accès qu'un point de surveillance peut activer.

Voici quelques-uns des points clés que KCSAN a fait pour Google:

  • Haut rendement: Le runtime KCSAN est minimal et ne nécessite pas de verrouillage d'état partagé pour chaque accès. Le résultat est une bien meilleure performance que KTSAN.
  • Pas de mémoire supplémentaire: selon Google, aucun cache n'est requis. L'implémentation actuelle utilise un petit nombre de longueurs pour coder les informations de point de surveillance, ce qui est négligeable.
  • Commande de mémoire: KCSAN ne connaît pas les règles de contrôle du modèle de mémoire du noyau Linux (LKMM). Cela peut entraîner la perte de courses critiques (faux négatifs) par rapport à un détecteur de course pré-événement comme KTSAN
  • Précision: Selon Google, KCSAN est imprécis car il utilise une stratégie d'échantillonnage;
  • Nécessite une annotation: une annotation minimale est requise en dehors de l'environnement d'exécution KCSAN. Dans le cas d'un écouteur d'événement de pré-condition, toute omission conduit à des faux positifs, ce qui est particulièrement important dans le contexte du noyau qui inclut des mécanismes de chronométrage personnalisés.
  • Détection des écritures dynamiques depuis les appareils: En vérifiant les valeurs des données lors de la configuration du point de surveillance, les écritures dynamiques à partir de périphériques peuvent également être détectées.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données : AB Internet Networks 2008 SL
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.