W jądrze Linux 5.18 planuje się zezwolić na użycie standardu języka C11

W trakcie omawiania zestawu poprawek rozwiązujących problemy związane z podatnościami typu Spectre w kodzie do pracy z listami powiązanymi, stało się jasne, że problem mógłby być rozwiązany w sposób bardziej elegancki, gdyby w jądrze dozwolono na kod w języku C odpowiadający nowszej wersji standardu. Obecnie dodawany kod jądra musi odpowiadać specyfikacji ANSI C (C89), która została opracowana w 1989 roku.

Problem związany z Spectre w kodzie został spowodowany kontynuacją użycia oddzielnie definiowanego iteratora po pętli – do iteracji po elementach listy powiązanej używany jest makro, a jako że iterator pętli jest przekazywany do tego makra, jest definiowany poza samą pętlą i pozostaje dostępny po jej zakończeniu. Użycie standardu C99 pozwoliłoby na definiowanie zmiennych dla pętli w bloku for(), co rozwiązałoby problem bez wynajdywania obejść.

Linus Torvalds zgodził się z pomysłem wprowadzenia wsparcia dla nowszych specyfikacji i zaproponował w jądrze 5.18 przejście na użycie standardu C11, opublikowanego w 2011 roku. Przy wstępnym sprawdzeniu, kompilacja w GCC i Clang w nowym trybie przebiegła bez odchyleń. Jeśli podczas dokładniejszego testowania nie wystąpią nieprzewidziane problemy, w skryptach budowy jądra 5.18 opcja '--std=gnu89' zostanie zastąpiona przez '--std=gnu11 -Wno-shift-negative-value'. Rozważano również możliwość użycia standardu C17, ale w tym przypadku należałoby podnieść minimalnie wspieraną wersję GCC. Natomiast włączenie wsparcia dla C11 mieści się w obecnych wymaganiach co do wersji GCC (5.1).

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster