У ядрі 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

Додати коментар або відгук