Der Linux-Kernel 5.18 sieht vor, die Verwendung des C-Sprachstandards C11 zu ermöglichen

Bei der Erörterung einer Reihe von Patches zur Behebung von Spectre-bezogenen Problemen im Linked-List-Code wurde klar, dass das Problem eleganter gelöst werden könnte, wenn C-Code, der einer neueren Version des Standards entspricht, in den Kernel zugelassen würde. Derzeit muss der hinzugefügte Kernel-Code der 89 erstellten ANSI C (C1989)-Spezifikation entsprechen.

Ein Spectre-bezogenes Problem im Code wurde durch die fortgesetzte Verwendung eines separat definierten Iterators nach der Schleife verursacht – ein Makro wird verwendet, um über die Elemente einer verknüpften Liste zu iterieren, und da der Schleifeniterator an dieses Makro übergeben wird, ist dies auch der Fall wird außerhalb der Schleife selbst definiert und bleibt nach der Schleife verfügbar. Die Verwendung des C99-Standards würde es ermöglichen, Schleifenvariablen in einem for()-Block zu definieren, was das Problem lösen würde, ohne dass Workarounds gefunden werden müssten.

Linus Torvalds stimmte der Idee zu, Unterstützung für neuere Spezifikationen zu implementieren, und schlug vor, den 5.18-Kernel auf den 11 veröffentlichten C2011-Standard umzustellen. Bei den vorläufigen Tests verlief die Montage in GCC und Clang im neuen Modus ohne Abweichungen. Wenn bei gründlicheren Tests keine unerwarteten Probleme auftreten, wird die Option „--std=gnu5.18“ in den 89-Kernel-Build-Skripten durch „--std=gnu11 -Wno-shift-negative-value“ ersetzt. Auch die Möglichkeit der Verwendung des C17-Standards wurde in Betracht gezogen, allerdings wäre in diesem Fall eine Erhöhung der unterstützten Mindestversion von GCC erforderlich. Die Aufnahme der C11-Unterstützung passt zu den aktuellen Anforderungen für die GCC-Version (5.1).

Source: opennet.ru

Kommentar hinzufügen