В ядрото на Linux 5.18 планират да разрешат използването на стандарта на езика Cи C11

В процес на обсъждане на пакета с пачове за решаване на уязвимости от класa Spectre в кода за работа с свързани списъци, стана ясно, че проблемът би могъл да бъде разрешен по-елегантно, ако кодът на езика C, който се добавя в ядрото, отговаряше на по-нова версия на стандарта. В момента добавеният в ядрото код трябва да отговаря на спецификацията на ANSI C (C89), изготвена още през 1989 година.

Проблемата, свързана със Spectre, в кода беше причинена от продължаващото използване на отделно определен итератор след цикъла — макросът се използва за обхождане на елементите на свързания списък и тъй като итераторът на цикъла се предава на този макрос, той се дефинира извън самия цикъл и остава достъпен след цикъла. Използването на стандарта C99 би могло да позволи определяне на променливи в цикъла в блока for(), което би решило проблема без необходимост от заобиколни решения.

Линус Торвалдс се съгласи с идеята за реализиране на поддръжка на по-нови спецификации и предложи в ядрото 5.18 да се премине към използване на стандарта C11, публикуван през 2011 година. При предварителната проверка, компилацията в GCC и Clang в новия режим премина без проблеми. Ако при по-подробно тестване не възникнат неочаквани проблеми, в скриптовете за компилация на ядрото 5.18 опцията '—std=gnu89' ще бъде заменена с '—std=gnu11 -Wno-shift-negative-value'. Обсъждаше се възможността и за използване на стандарта C17, но в такъв случай би трябвало да се повиши минимално поддържаната версия на GCC. Включването на поддръжка за C11 отговаря на текущите изисквания за версия на GCC (5.1).

Източник: opennet.ru

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster