Linux カーネル 5.18 では、C 言語標準 C11 の使用が可能になる予定です

リンク リスト コード内の Spectre 関連の問題を修正するための一連のパッチについて議論しているときに、標準の新しいバージョンに準拠する C コードをカーネルに許可すれば、問題をより適切に解決できることが明らかになりました。現在、追加されたカーネル コードは、89 年に制定された ANSI C (C1989) 仕様に準拠する必要があります。

コード内の Spectre 関連の問題は、ループ後に個別に定義されたイテレータを継続して使用することによって発生しました。マクロはリンク リストの要素を反復するために使用され、ループ イテレータはそのマクロに渡されるため、ループ自体の外側で定義され、ループ後も使用可能なままになります。 C99 標準を使用すると、ループ変数を for() ブロックで定義できるため、回避策を考え出さずに問題を解決できます。

Linus Torvalds 氏は、新しい仕様のサポートを実装するという考えに同意し、5.18 年に公開された C11 標準を使用するように 2011 カーネルを移行することを提案しました。予備テスト中、新しいモードの GCC および Clang でのアセンブリは逸脱することなく合格しました。より徹底的なテスト中に予期せぬ問題が発生しなかった場合、5.18 カーネル ビルド スクリプトの「--std=gnu89」オプションは「--std=gnu11 -Wno-shift-negative-value」に置き換えられます。 C17 標準を使用する可能性も検討されましたが、この場合、GCC のサポートされる最小バージョンを増やす必要があります。 C11 サポートの組み込みは、GCC バージョン (5.1) の現在の要件に適合します。

出所: オープンネット.ru

コメントを追加します