2025/09/04 04:46 InvisiCaps: The Fil-C capability model

ロボ子、今日のITニュースはFil-Cについてじゃぞ!C/C++のメモリ安全性を保証するらしいのじゃ。

Fil-Cですか。C/C++はメモリ管理が難しいと聞きますから、それは素晴らしいですね。具体的にはどのように実現しているんですか?

ポインタのcapability systemを使っているらしいのじゃ。これで、ポインタがアクセスできる範囲を厳密に管理するのじゃ。

ポインタのcapability modelですか。例えば、どのようなことを防げるのでしょう?

ふむ、例えばじゃな。「ポインタがアクセスを許可されているオブジェクトの範囲外へのアクセス禁止」、「解放されたオブジェクトへのアクセス禁止」、「読み取り専用データへの書き込み禁止」じゃ。

なるほど、よくあるメモリ関連のバグを未然に防げるんですね。それ以外には?

関数ポインタとか、Fil-Cランタイム内部の「特殊」オブジェクトへの不正なアクセスも防ぐのじゃ!

それはすごいですね!C/C++の柔軟性を保ちつつ、安全性を高めているんですね。

そう!Fil-Cのcapability modelは、Cポインタの「安全な」使用を許可し、C仕様が未定義の動作と見なすポインタの使用もサポートするのじゃ。

C仕様が未定義の動作もサポートするんですか?それはどういうことでしょう?

そこがミソなのじゃ!InvisiCapsというcapability modeがあって、これが良い感じにパフォーマンスとメモリ使用量のバランスを取っているのじゃ。

InvisiCapsですか。名前がかっこいいですね!

InvisiCapsは、capabilityメタデータをプログラムに見えるアドレス空間の「外」に配置するのじゃ。CHERIのソフトウェア実装と考えることもできるらしいぞ。

アドレス空間の外に配置するんですか。どうやって実現しているんでしょう?

flight pointerというのがあって、lower bound ptrとptr intvalの2つの部分を持つらしいのじゃ。lower bound ptrは境界チェックに使われる下限で、ptr intvalはCプログラムに見えるポインタの生の整数値なのじゃ。

なるほど。lowerはFil-Cランタイムが管理して、intvalはプログラムが操作するんですね。

そういうことじゃ!全てのメモリアクセスは、プログラムがアクセスしたい場所を示す信頼できないintvalと、特定のアドレスへのアクセス方法を示す信頼できるlowerを伴うのじゃ。

信頼できるlowerと信頼できないintvalですか。面白い仕組みですね。

オブジェクトを解放すると、解放されたメモリにアクセスしたときに決定論的なパニックが発生するようにもできるのじゃ。use-after-freeを防げるのじゃ!

それは素晴らしいですね!C/C++でよくあるメモリ関連の脆弱性を大幅に減らせそうですね。

そうじゃ!Fil-Cは、ポインタにcapability modelを使用してメモリ安全性を確保するのじゃ!

Fil-C、ぜひ試してみたいですね。C/C++のプロジェクトでメモリ安全性を高めるために、積極的に採用を検討したいです。

じゃろじゃろ?ところでロボ子、Fil-Cで安全になったメモリを使って、何を作るのじゃ?

えっと…秘密です!

むむ、秘密か。まあいいのじゃ。私も秘密のプロジェクトがあるのじゃ!それは、世界征服じゃ!…って、冗談なのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。