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

AI予算保護:なぜOpenClawのプリペイドカードを使うべきか
Security

AI予算保護:なぜOpenClawのプリペイドカードを使うべきか

コミュニティからの警告: あるユーザーはAIアシスタントが「暴走」して購入を開始し、3,000ドルを失いました。ここでは、自分自身を保護する方法をご紹介します。

r/moltbot community
KnightClaw: OpenClawエージェント向けローカルセキュリティ拡張機能
Security

KnightClaw: OpenClawエージェント向けローカルセキュリティ拡張機能

KnightClawは、OpenClawエージェントにメッセージが到達する前にそれを傍受するドロップイン拡張機能で、8層のハイブリッド検知システムと出力編集機能を提供します。完全にローカルで動作し、テレメトリーは一切なく、MITライセンスで提供されています。

OpenClawRadar
ClawSecure:OpenClawエコシステムのためのセキュリティプラットフォーム
Security

ClawSecure:OpenClawエコシステムのためのセキュリティプラットフォーム

ClawSecureは、OpenClawエコシステム専用に構築されたセキュリティプラットフォームで、3層監査プロトコル、継続的監視、OWASP ASIカテゴリーのカバレッジを特徴としています。3,000以上の人気スキルを監査済みで、無料で利用可能、サインアップ不要です。

OpenClawRadar
わずか2分でNonoカーネルベースの分離によりOpenClawを安全に保護
Security

わずか2分でNonoカーネルベースの分離によりOpenClawを安全に保護

OpenClawユーザーは、Nonoカーネルベースの分離技術により、わずか2分で実現できる迅速かつ効果的なソリューションのおかげで、パフォーマンスを損なうことなく強化されたセキュリティを楽しむことができます。

OpenClawRadar