Im Linux-Kernel 5.18 wird die Verwendung des C11-Standards für die Programmiersprache C ermöglicht.

Im Rahmen der Diskussion über die Patch-Sammlung zur Behebung von Sicherheitsanfälligkeiten der Spectre-Klasse im Code für die Bearbeitung von verketteten Listen wurde klar, dass das Problem eleganter gelöst werden könnte, wenn das Kernel es erlauben würde, Code in C zu nutzen, der einer neueren Version des Standards entspricht. Derzeit muss der dem Kernel hinzugefügte Code 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 – zur Durchlaufung der Elemente einer verketteten Liste wird ein Makro verwendet, und da der Iterator der Schleife in 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 innerhalb des for()-Blocks zu definieren, was das Problem lösen würde, ohne dass Umgehungslösungen erfunden werden müssen.

Linus Torvalds hat der Idee zugestimmt, die Unterstützung neuerer Spezifikationen umzusetzen, und vorgeschlagen, im Kernel 5.18 auf den C11-Standard umzusteigen, der 2011 veröffentlicht wurde. Bei der ersten Überprüfung verlief die Kompilierung in GCC und Clang im neuen Modus ohne Abweichungen. Sollten bei weiteren Tests keine unvorhergesehenen Probleme auftreten, wird in den Build-Skripten des Kernels 5.18 die Option '—std=gnu89' durch '—std=gnu11 -Wno-shift-negative-value' ersetzt. Auch die Verwendung des C17-Standards wurde in Betracht gezogen, jedoch müsste in diesem Fall die minimal unterstützte GCC-Version angehoben werden. Die Unterstützung von C11 lässt sich jedoch in die aktuellen Anforderungen an die GCC-Version (5.1) integrieren.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster