У ядры Linux 5.18 плануюць дазволіць выкарыстанне стандарту мовы Сі C11

У працэсе абмеркавання набору патчаў з выпраўленнем звязаных з уразлівасцямі класа Spectre праблем у кодзе для працы са звязанымі спісамі, стала ясна, што праблему атрымалася б вырашыць больш хупава, калі б у ядро ​​дапушчаўся код на мове Сі, які адпавядае навейшай версіі стандарту. У цяперашні час які дадаецца ядро ​​код павінен адпавядаць спецыфікацыі ANSI C (С89), сфармаванай яшчэ ў 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

Дадаць каментар