Under diskussion om en uppsÀttning patchar för att ÄtgÀrda sÀkerhetsproblem relaterade till Spectre i koden för att hantera lÀnkade listor, stod det klart att problemet skulle kunna lösas mer elegant om kÀrnan tillÀt C-kod som följer en nyare standard. För nÀrvarande mÄste den kod som lÀggs till kÀrnan följa ANSI C-specifikationen (C89), som formades redan 1989.
Spectre-relaterade problem i koden orsakades av fortsatt anvĂ€ndning av en separat definierad iterator efter loopen â för att iterera över elementen i den lĂ€nkade listan anvĂ€nds en makro och eftersom loopens iterator överförs till detta makro, definieras den utanför sjĂ€lva loopen och förblir tillgĂ€nglig efter loopen. AnvĂ€ndningen av standarden C99 skulle ha möjliggjort att definiera variabler för loopen inom for()-blocket, vilket skulle ha löst problemet utan att behöva hitta pĂ„ omvĂ€gar.
Linus Torvalds gick med pĂ„ idĂ©n om att implementera stöd för nyare specifikationer och föreslog att kĂ€rna 5.18 skulle anvĂ€nda C11-standarden, som publicerades 2011. Vid en preliminĂ€r kontroll gick byggnader i GCC och Clang i det nya lĂ€get utan avvikelser. Om ingen ovĂ€ntad problem upptĂ€cks vid mer noggrannt testande, kommer alternativet ââstd=gnu89â i byggningsskripten för kĂ€rna 5.18 att ersĂ€ttas med ââstd=gnu11 -Wno-shift-negative-valueâ. Möjligheten att anvĂ€nda standarden C17 diskuterades ocksĂ„, men i sĂ„ fall skulle det ha krĂ€vts att den minimi stödjande versionen av GCC höjdes. Att inkludera stöd för C11 ligger inom de nuvarande kraven för GCC-version (5.1).
KĂ€lla: opennet.ru
