Im Linux-Kernel 5.18 planen sie, die Verwendung des Standards der Programmiersprache C11 zuzulassen.

Im Verlauf der Diskussion über eine Reihe von Patches zur Behebung von mit der Spectre-Sicherheitsanfälligkeit verbundenen Problemen im Code für die Verarbeitung von verketteten Listen wurde deutlich, dass das Problem eleganter gelöst werden könnte, wenn im Kernel Code in C zugelassen wäre, der einer neueren Version des Standards entspräche. Der derzeit hinzuzufügende Kernel-Code muss der ANSI-C-Spezifikation (C89) entsprechen, die bereits 1989 erstellt wurde.

Das mit Spectre verbundene Problem im Code wurde durch die fortgesetzte Verwendung eines separat definierten Iterators nach der Schleife verursacht – zum Durchlaufen der Elemente einer verketteten Liste wird ein Makro verwendet, und da der Iterator der Schleife an dieses Makro übergeben wird, wird er außerhalb der Schleife definiert und bleibt nach der Schleife verfügbar. Die Verwendung des C99-Standards würde es ermöglichen, Variablen für die Schleife im Block for() zu definieren, was das Problem ohne Umgehungen lösen würde.

Linus Torvalds stimmte der Idee zu, die Unterstützung neuerer Spezifikationen umzusetzen, und schlug vor, im Kernel 5.18 auf die Verwendung des 2011 veröffentlichten C11-Standards umzusteigen. Bei einer vorläufigen Überprüfung verlief die Kompilierung in GCC und Clang im neuen Modus ohne Abweichungen. Falls bei einer gründlicheren Testphase keine unerwarteten Probleme auftreten, wird in den Build-Skripten des Kernels 5.18 die Option ‘—std=gnu89’ durch ‘—std=gnu11 -Wno-shift-negative-value’ ersetzt. Es wurde auch in Betracht gezogen, den C17-Standard zu verwenden, jedoch müsste in diesem Fall die minimal unterstützte GCC-Version erhöht werden. Die Unterstützung von C11 passt jedoch zu den aktuellen Anforderungen an die GCC-Version (5.1).

Quelle: opennet.ru

60GB SSD 8Gb DDR4