Fil-C делает setjmp/longjmp и ucontext безопасными для памяти

✍️ OpenClawRadar📅 Опубликовано: 1 июля 2026 г.🔗 Source
Fil-C делает setjmp/longjmp и ucontext безопасными для памяти
Ad

Fil-C, диалект C с безопасной памятью, теперь поддерживает setjmp/longjmp и API ucontext (setcontext, getcontext, makecontext, swapcontext) без повреждения стека или нарушений способностей. Эта возможность появилась в версии 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 управляет стеками так, что операция либо допустима, либо вызывает панику, поскольку висящие кадры стека просто невозможны.

Пример: setjmp/longjmp в Fil-C

Следующая программа демонстрирует поведение:

#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

👀 Смотрите также

Критические уязвимости безопасности OpenClaw устранены в версии 2026.3.28.
Безопасность

Критические уязвимости безопасности OpenClaw устранены в версии 2026.3.28.

Версия OpenClaw 2026.3.28 исправляет 8 критических уязвимостей в системе безопасности, обнаруженных Ant AI Security Lab, включая обход песочницы, повышение привилегий и риски SSRF. Пользователям версий ≤2026.3.24 следует немедленно обновиться.

OpenClawRadar
🦀
Безопасность

Статический анализ 48 приложений, сгенерированных ИИ: 90% имели уязвимости в безопасности

Разработчик проверил 48 публичных GitHub-репозиториев, созданных с помощью Lovable, Bolt и Replit. 90% из них имели хотя бы одну уязвимость. Распространенные проблемы: пробелы в аутентификации (44%), функции Postgres SECURITY DEFINER (33%), BOLA/IDOR (25%) и закоммиченные секреты (25%).

OpenClawRadar
Пользователь OpenClaw делится стратегией балансировки автономии агентов и веб-безопасности.
Безопасность

Пользователь OpenClaw делится стратегией балансировки автономии агентов и веб-безопасности.

Пользователь OpenClaw описывает свою текущую задачу: балансирование автономности агентов с безопасностью, особенно в отношении доступа в интернет и рисков инъекции промптов. Они предлагают решение с использованием сегментов агентов с 'низким доверием' и 'высоким доверием' с этапом одобрения человеком.

OpenClawRadar
Многосообщенная инъекция промптов: атака с использованием образа «Вымышленное существо» против Claude
Безопасность

Многосообщенная инъекция промптов: атака с использованием образа «Вымышленное существо» против Claude

Атака, которая за три сообщения создает вымышленное правило, а затем призывает призрака для его активации — каждое сообщение по отдельности безвредно. Схема независимо сходится у разных атакующих.

OpenClawRadar