A hivatkozott listakódban a Spectre-hez kapcsolódó problémák kijavítására szolgáló javítások megvitatása során világossá vált, hogy a probléma kecsesebben megoldható, ha a szabvány újabb verziójának megfelelő C kódot beengednék a kernelbe. Jelenleg a hozzáadott kernelkódnak meg kell felelnie az 89-ben kialakított ANSI C (C1989) specifikációnak.
A kódban a Spectre-hez kapcsolódó problémát az okozta, hogy a ciklus után továbbra is külön definiált iterátort használtak – egy makrót használnak a hivatkozott lista elemei feletti iterációra, és mivel a ciklusiterátor átkerült abba a makróba, magán a hurkon kívül van meghatározva, és elérhető marad a ciklus után is. A C99 szabvány használata lehetővé tenné a ciklusváltozók for() blokkban történő meghatározását, ami megoldaná a problémát anélkül, hogy megkerülő megoldásokkal kellene előállnia.
Linus Torvalds egyetértett az újabb specifikációk támogatásának ötletével, és javasolta az 5.18-as kernel áthelyezését a 11-ben közzétett C2011 szabvány használatára. Az előzetes tesztelés során az összeszerelés GCC-ben és Clang-ben az új módban eltérések nélkül zajlott le. Ha az alaposabb tesztelés során nem merülnek fel váratlan problémák, akkor az 5.18-as kernel felépítési parancsfájljaiban a '--std=gnu89' opció lecserélődik a '--std=gnu11 -Wno-shift-negative-value' értékre. A C17 szabvány alkalmazásának lehetőségét is mérlegelték, de ebben az esetben a GCC minimálisan támogatott verziójának növelésére lenne szükség. A C11 támogatás beépítése beleillik a GCC verzió (5.1) jelenlegi követelményeibe.
Forrás: opennet.ru
