Fil-Cがsetjmp/longjmpとucontextをメモリ安全にする

✍️ OpenClawRadar📅 公開日: July 1, 2026🔗 Source
Fil-Cがsetjmp/longjmpとucontextをメモリ安全にする
Ad

メモリ安全なC方言であるFil-Cは、スタック破損やケイパビリティ違反なしにsetjmp/longjmpとucontext API(setcontextgetcontextmakecontextswapcontext)をサポートするようになりました。この機能はリリース0.680で導入され、ソースからビルドする際に利用可能です。

コンテキストAPIの問題点

これらのAPIは、誤用によりダングリングスタックを復元する可能性があるため、非常に危険です。一般的なバグには以下があります:

  • 関数内でsetjmpまたはgetcontextを呼び出した後、戻ってしまう——保存されたコンテキストはもはや存在しないスタックフレームを指している。
  • スレッドを終了した後、解放されたスタックで実行を復元しようとする。
  • スタック上でmakecontextを使用してコンテキストを作成し、そのスタックを解放した後、swapcontextまたはsetcontextでそこに切り替える。
  • 現在実行中のコンテキストをswapcontextの第二引数として渡す(自分自身に切り替える)。

標準C(「Yolo-C」)では、これらのバグは静的なスタック破損、デバッグが困難なクラッシュ、および潜在的なセキュリティエクスプロイトを引き起こします。Fil-Cでは、このようなケースはすべて誤用の時点でパニックを発生させます。

Ad

Fil-Cがメモリ安全性を実現する方法

Fil-Cのアプローチはsetjmp/longjmpとucontextで異なります。setjmp/longjmpの場合、主な課題はsetjmpが二度戻ることです——呼び出された時とlongjmpの後。コンテキストを保存する動作は、コンパイラがvolatile注釈付き変数を正しく扱う必要があることを意味しますが、Fil-Cはコンテキストの復元が解放されたメモリや無効なメモリにアクセスしないことを保証します。

ucontextの場合、Fil-Cはスタックを管理し、操作を合法にするか、パニックにするかのいずれかです。ダングリングスタックフレームはそもそも不可能だからです。

例:Fil-Cでのsetjmp/longjmp

次のプログラムは動作を示しています:

#include <setjmp.h>
#include <stdio.h>

int main(int argc, char** argv) { volatile int x = 42; jmp_buf jb; if (setjmp(jb)) { printf("x = %d\n", x); return 0; } x = 666; longjmp(jb, 1); printf("Should not get here.\n"); return 1; }

これはx = 666を出力して終了します。volatileがない場合、コンパイラは最適化して代わりに42を出力する可能性があります。Fil-Cは最適化のセマンティクスを変更しませんが、メモリ破損を防止します。

誰のため?

ucontextベースのコルーチン(例:Boost fibers)やsetjmp/longjmpをCプログラムでの例外処理に使用し、メモリ安全性を求める開発者向けです。

📖 全文ソース: HN AI Agents

Ad

👀 See Also

なぜ内部RAGとドキュメントチャットツールはセキュリティ監査に不合格となるのか
Security

なぜ内部RAGとドキュメントチャットツールはセキュリティ監査に不合格となるのか

コミュニティでは、RAGツールが本番環境に到達するのを妨げる現実世界のセキュリティとコンプライアンスの障壁について議論されています。

OpenClaw Radar
セキュリティ監査により、OpenClawスキルエコシステムに脆弱性が発見されました
Security

セキュリティ監査により、OpenClawスキルエコシステムに脆弱性が発見されました

OpenClawのセキュリティ監査により、任意コード実行や認証情報窃取の脆弱性を含む8つの文書化されたCVEが発見されました。さらに、共有ライブラリ内のスキルの15%が不審なネットワーク動作を示しています。監査担当者は、より優れた分離性を実現するため、Ollamaを使用した最小限のRustベースのランタイムに移行しました。

OpenClawRadar
AIエージェントのボットネット参加防止:セキュリティ上の考慮事項
Security

AIエージェントのボットネット参加防止:セキュリティ上の考慮事項

コミュニティでは、自律型AIエージェントがハイジャックされたり、悪意のあるボットネットに利用されたりするのを防ぐ方法について議論されています。

OpenClaw Radar
AIエージェントによるデータ漏洩リスクを低減する2つのアプローチ
Security

AIエージェントによるデータ漏洩リスクを低減する2つのアプローチ

Redditの投稿では、開発者がAIエージェントのデータの行き先を制御する2つの方法が示されています:OpenAIやAnthropicのようなプロバイダーと直接APIキーを使用して中間業者を排除する方法、またはOllamaやOpenClawのようなツールでオープンソースモデルをローカルで実行する方法です。

OpenClawRadar