web-dev-qa-db-fra.com

Qu'est-ce qu'un noyau corrompu sous Linux?

Sous certaines conditions, le noyau Linux peut devenir entaché. Par exemple, le chargement d'un pilote vidéo propriétaire dans le noyau entache le noyau. Cette condition peut être visible dans les journaux système, les messages d'erreur du noyau (oups et paniques) et à travers des outils tels que lsmod, et persiste jusqu'à ce que le système soit redémarré.

Qu'est-ce que ça veut dire? Cela affecte-t-il ma capacité à utiliser le système et comment cela pourrait-il affecter mes options de support?

104
bwDraco

Lorsque le noyau est corrompu, cela signifie que il est dans un état qui n'est pas pris en charge par la communauté . La plupart des développeurs de noyau ignoreront les rapports de bogues impliquant des noyaux corrompus, et les membres de la communauté peuvent vous demander de corriger la condition de contamination avant de pouvoir diagnostiquer les problèmes liés au noyau. De plus, certaines fonctionnalités de débogage et appels d'API peuvent être désactivés lorsque le noyau est corrompu.

Dans la plupart des cas impliquant des pilotes propriétaires, vous pouvez ignorer en toute sécurité la condition de taint , mais certains scénarios qui provoquent le ternissement du noyau peuvent indiquer de graves problèmes système .

Cette fonctionnalité est destinée à identifier les conditions qui peuvent rendre difficile le dépannage correct d'un problème de noyau. Par exemple, le chargement d'un module propriétaire peut rendre la sortie de débogage du noyau peu fiable car les développeurs du noyau n'ont pas accès au code source du module et ne peuvent donc pas déterminer ce que le module a pu faire au noyau. De même, si le noyau a précédemment rencontré une condition d'erreur ou si une erreur matérielle grave s'est produite, les informations de débogage générées par le noyau peuvent ne pas être fiables.

Le noyau peut devenir vicié pour plusieurs raisons , y compris (mais sans s'y limiter) les éléments suivants:

  • L'utilisation d'un module de noyau propriétaire (ou non compatible GPL) - c'est la cause la plus courante de noyaux corrompus et résulte généralement du chargement de pilotes vidéo propriétaires NVIDIA ou AMD
  • L'utilisation des pilotes staging, qui font partie du code source du noyau mais ne sont pas entièrement testés
  • L'utilisation de modules hors arborescence qui ne sont pas inclus avec le code source du noyau Linux
  • Chargement ou déchargement forcé d'un module du noyau (comme l'insertion forcée d'un module non construit pour la version actuelle du noyau)
  • L'utilisation d'un noyau SMP (multiprocesseur) sur certains processeurs monoprocesseurs non pris en charge, principalement les processeurs AMD Athlon plus anciens
  • Remplacement du ACPI DSDT, parfois nécessaire pour corriger les bogues de gestion de l'alimentation (voir ici pour plus de détails)
  • Certaines conditions d'erreur critiques, telles que exceptions de vérification de la machine et oopses du noya
  • Certains bugs graves dans le firmware du système (BIOS, UEFI) que le noyau doit contourner

Chacune de ces conditions est représentée par un drapeau particulier dans le noyau. Certains fournisseurs Linux, tels que SUSE, ajoutent des drapeaux supplémentaires pour indiquer des conditions telles que le chargement d'un module qui n'est pas pris en charge par le vendeur.

Plus d'informations sont disponibles dans la documentation du noya . Les drapeaux corrompus répertoriés ici sont (avec _ un remplaçant pour "vide")

  • G | P : G si tous les modules chargés ont une licence GPL ou compatible, sinon un module propriétaire a été chargé. Les modules sans MODULE_LICENSE ou avec un MODULE_LICENSE qui n'est pas reconnu par insmod comme compatible GPL sont supposés être propriétaires.
  • F | _ : si un module a été chargé de force par "insmod -f" sinon si tous les modules ont été chargés normalement.
  • S | _ : si le problème s'est produit sur un noyau SMP fonctionnant sur du matériel qui n'a pas été certifié sûr pour exécuter le multiprocesseur. Actuellement, cela se produit uniquement sur divers Athlons qui ne sont pas capables de SMP.
  • R | _ : si un module a été déchargé de force par rmmod -f, sinon si tous les modules ont été déchargés normalement.
  • M | _ : si un processeur a signalé une exception de vérification de la machine , sinon aucune exception de vérification de la machine ne s'est produite.
  • B | _ : si une fonction de libération de page a trouvé une mauvaise référence de page ou des indicateurs de page inattendus.
  • U | _ : si un utilisateur ou une application utilisateur a spécifiquement demandé que l'indicateur Tainted soit défini.
  • D | _ : si le noyau est mort récemment, c'est-à-dire qu'il y avait OUPS = ou BUG.
  • A | _ : si la table ACPI a été remplacée.
  • W | _ : si un avertissement a déjà été émis par le noyau (bien que certains avertissements puissent définir des indicateurs de tache plus spécifiques.)
  • C | _ : si un pilote de transfert a été chargé.
  • I | _ : si le noyau contourne un bogue grave dans le micrologiciel de la plate-forme (BIOS ou similaire).
  • O | _ : si un module construit en externe ("out-of-tree") a été chargé.
  • E | _ : si un module non signé a été chargé dans un noyau supportant la signature du module.
  • L | _ : si un blocage logiciel s'est déjà produit sur le système.
  • K | _ : si le noyau a été corrigé en direct.
133
bwDraco