Lors des discussions sur le correctif visant à résoudre les problèmes liés à Spectre dans le code des listes chaînées, il est apparu clairement que le problème pourrait être résolu plus élégamment si le noyau pouvait intégrer du code C conforme à une version plus récente de la norme. Actuellement, tout code ajouté au noyau doit être conforme à la spécification ANSI C (C89), établie en 1989.
Le problème lié à Spectre dans le code était dû à l'utilisation continue d'un itérateur défini séparément après une boucle. Une macro est utilisée pour parcourir les éléments d'une liste chaînée, et comme l'itérateur de boucle est passé à cette macro, il est défini en dehors de la boucle elle-même et reste accessible après son exécution. L'utilisation de la norme C99 permettrait de définir les variables de boucle à l'intérieur du bloc `for()`, ce qui résoudrait le problème sans avoir recours à une solution de contournement.
Linus Torvalds a approuvé l'idée d'implémenter la prise en charge des spécifications plus récentes et a proposé de passer à la norme C11, publiée en 2011, dans le noyau 5.18. Les tests préliminaires n'ont révélé aucun problème avec le nouveau mode de compilation de GCC et Clang. Si des tests plus approfondis ne révèlent aucun problème inattendu, l'option « --std=gnu89 » dans les scripts de compilation du noyau 5.18 sera remplacée par « --std=gnu11 -Wno-shift-negative-value ». L'utilisation de la norme C17 a également été envisagée, mais cela nécessiterait d'augmenter la version minimale de GCC requise. L'activation de la prise en charge de C11 est compatible avec la version actuelle de GCC (5.1).
Source: opennet.ru
