Le noyau Linux 5.18 prévoit de permettre l'utilisation du standard de langage C C11

Lors de la discussion d'un ensemble de correctifs destinés à résoudre les problèmes liés à Spectre dans le code de la liste chaînée, il est devenu clair que le problème pourrait être résolu plus facilement si le code C conforme à une version plus récente de la norme était autorisé dans le noyau. Actuellement, le code du noyau ajouté doit être conforme à la spécification ANSI C (C89), créée en 1989.

Un problème lié à Spectre dans le code était dû à l'utilisation continue d'un itérateur défini séparément après la 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é dans cette macro, il est défini en dehors de la boucle elle-même et reste disponible après la boucle. L'utilisation de la norme C99 permettrait de définir des variables de boucle dans un bloc for(), ce qui résoudrait le problème sans avoir à trouver de solutions de contournement.

Linus Torvalds était d'accord avec l'idée d'implémenter la prise en charge de spécifications plus récentes et a proposé de déplacer le noyau 5.18 pour utiliser la norme C11, publiée en 2011. Lors des tests préliminaires, l'assemblage dans GCC et Clang dans le nouveau mode s'est déroulé sans écarts. Si aucun problème imprévu ne survient lors de tests plus approfondis, l'option '--std=gnu5.18' sera remplacée par '--std=gnu89 -Wno-shift-negative-value' dans les scripts de construction du noyau 11. La possibilité d'utiliser la norme C17 a également été envisagée, mais dans ce cas, il serait nécessaire d'augmenter la version minimale prise en charge de GCC. L'inclusion de la prise en charge de C11 correspond aux exigences actuelles de la version GCC (5.1).

Source: opennet.ru

Ajouter un commentaire