Le noyau Linux 7.1-rc6 supprime la documentation officielle de la fonctionnalité clearcpuid pour décourager son usage en production. Ce paramètre, utilisé pour désactiver des caractéristiques du processeur, présente des risques de dysfonctionnement système et ne s’applique pas aux applications utilisateur, rendant son utilisation dangereuse hors contexte de débogage.
Le paradoxe de clearcpuid : un masque incomplet
Le problème majeur réside dans la portée de l’action. Lorsque l’on utilise clearcpuid, on ne désactive pas physiquement la fonctionnalité du matériel, on demande simplement au noyau Linux de l’ignorer. Le noyau, qui est le cœur du système gérant le CPU et la mémoire, cesse d’utiliser la fonctionnalité. Mais les applications évoluant dans l’espace utilisateur (user-space) peuvent toujours interroger le CPU directement. Si une application appelle l’instruction CPUID sans passer par les filtres du noyau, elle verra que la fonctionnalité est toujours présente et tentera de l’utiliser. Ce décalage entre ce que le noyau croit être possible et ce que le matériel permet réellement peut mener à des comportements imprévisibles, voire à un crash complet du système si des fonctions critiques sont masquées. L’approche des développeurs est donc radicale : puisque l’outil est trop dangereux pour être utilisé par des non-experts en production, on efface le mode d’emploi.L’avertissement d’AMD et le risque de noyau contaminé
Le retrait de la documentation n’est pas une simple mise à jour administrative, c’est un signal d’alarme. Borislav Petkov, d’AMD, a été explicite lors de la soumission du correctif. « Supprimez sa documentation pour qu’elle ne soit pas utilisée en production et que les gens n’aient pas d’idées farfelues. Elle est destinée strictement au débogage ; et si un bit de secours pour désactiver correctement une fonctionnalité était justifié, alors cela nécessiterait une activation appropriée. » Borislav Petkov, AMD, via Phoronix L’utilisation de ce paramètre entraîne désormais une conséquence symbolique mais technique : le noyau est considéré comme contaminé (tainted). Dans le jargon Linux, un noyau contaminé est un noyau dont l’état est devenu inconnu ou non standard, ce qui rend tout rapport de bug suspect aux yeux des développeurs. Le nouveau message qui remplace la documentation est sans équivoque : « N’UTILISEZ PAS cette option de ligne de commande en production – elle est destinée à être utilisée uniquement comme une aide au débogage rapide et sommaire pour vérifier si un code d’activation de fonctionnalité est le coupable. Si vous l’utilisez, cela contaminera le noyau. » Documentation du noyau LinuxL’exemple concret : désactiver le Hardware Lock Elision sur RHEL
Pour comprendre pourquoi certains administrateurs s’accrochent à cet outil, il faut regarder des cas d’usage complexes. IBM a notamment documenté l’utilisation de clearcpuid sur Red Hat Enterprise Linux (RHEL) pour désactiver le Hardware Lock Elision (HLE). Le processus illustre la complexité et la fragilité de l’opération. Pour désactiver le HLE, l’administrateur doit calculer manuellement la valeur décimale du bit correspondant. Dans l’exemple fourni par IBM, le calcul est le suivant :- Calcul : 9 × 32 + 4 = 292
- Paramètre appliqué :
clearcpuid=292 - Action : Ajout de la valeur dans le fichier
/etc/default/grubsous la variableGRUB_CMDLINE_LINUX. - Finalisation : Reconstruction du fichier de configuration via
grub2-mkconfiget redémarrage du système.
cat /proc/cpuinfo | grep -i hle permet de vérifier que le drapeau a disparu. C’est précisément ce genre de manipulation « artisanale » que les mainteneurs du noyau souhaitent limiter. Une erreur de calcul dans le bit et c’est l’ensemble de la stabilité du serveur qui est compromise.