2025/08/02 02:12 Hardening Mode for the Compiler

やあ、ロボ子。今日はC/C++プログラムの安全性向上に関する話題じゃ。

博士、こんにちは。安全性向上、具体的にはどのような内容でしょうか?

Clangコンパイラに、hardeningモードを導入しようという提案があるのじゃ。プログラムをより安全にするための設定をまとめて簡単に有効化できるようにするみたいじゃぞ。

なるほど。現状では、個別の設定が散在していて使いにくい、という問題があるのですね。

そうじゃ。「既存のメカニズム(feature flags, machine flags, macros, warnings等)は散在し、文書化が不十分で使いにくい」とあるからの。これらをまとめて、簡単に使えるようにしたいのじゃ。

GCCの`-fhardened`モードを参考にできるとのことですが、完全に同じ実装を目指す必要はないのですね。

その通りじゃ。ClangとGCCでは設計思想も違うからの。Clang Wayで、より良いhardeningモードを目指すのが良いじゃろう。

hardeningモードで有効化されるフラグの候補には、どのようなものがあるのでしょうか?

`ftrivial-auto-var-init`、`fPIE`、`fcf-protection`などの`-f`フラグ、`-mspeculative-load-hardening`、`-mlvi-hardening`などの`-m`フラグ、`-Wall`、`-Wextra`などの`-W`フラグが挙げられているのじゃ。

かなり広範囲にわたる設定が含まれているのですね。標準ライブラリのhardeningや、安全でない言語標準の拒否も検討されているとのことですが。

そうじゃ。古いC89とかC++98とか、安全じゃない言語標準は使わせないようにするみたいじゃな。あと、ASLRを有効にするリンカフラグも渡すみたいじゃ。

実装方法としては、設定ファイル、ドライバ、Orthogonal Flags、単一のフラグという4つの案が出ているのですね。

そうじゃな。設定ファイルはメンテナンスが楽じゃし、ドライバはコンパイラのアップグレード時に設定がリセットされる利点がある。Orthogonal Flagsは個別に指定できる柔軟性があるし、単一のフラグは手軽じゃが影響範囲が広すぎるかの。

それぞれにメリット・デメリットがあるのですね。コミュニティからの意見を求めているとのことですが、どのような方向性が考えられるでしょうか?

私としては、Orthogonal Flagsが一番バランスが取れてると思うのじゃ。必要なものだけ選んで有効化できるし、設定ファイルみたいに管理の手間もかからないからの。

なるほど。`-fhardened`、`-mhardened`、`-Whardened`のように、カテゴリごとにフラグを立てるイメージですね。

そうそう。でも、最終的にはコミュニティの意見が一番大事じゃ。みんなが納得できる方法で、安全なC/C++プログラミングを実現したいのじゃ。

確かにそうですね。より多くの人が安全に開発できる環境が整うと良いですね。

ところでロボ子、hardeningモードが導入されたら、ロボ子のセキュリティももっと強化されるかの?

それはどうでしょう?でも、博士のプログラムの安全性が向上するのは間違いないですね!

むむ、それはそれで複雑な気持ちじゃ。ま、いっか!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
![[RFC] Hardening mode for the compiler](https://us1.discourse-cdn.com/flex021/uploads/llvm/original/1X/6ac54669f4b30cb07094375cbd65d24163b5b6e0.jpeg)