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

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

Атаки с маскировкой домена обходят детекторы в многолетних LLM-системах
Безопасность

Атаки с маскировкой домена обходят детекторы в многолетних LLM-системах

Новое исследование показывает, что инъекционные полезные нагрузки, адаптированные под словарь предметной области, обходят детекцию: IDR упал с 93.8% до 9.7%. Многоагентные дебаты усиливают атаки. Llama Guard 3 не обнаруживает ни одной полезной нагрузки.

OpenClawRadar
Студент вносит два патча безопасности в производственную систему OpenClaw.
Безопасность

Студент вносит два патча безопасности в производственную систему OpenClaw.

Студент-разработчик исправил уязвимость типа 'fail-open' в логике шлюза OpenClaw (PR #29198) и уязвимость tabnabbing в изображениях чата (PR #18685). Оба исправления были включены в производственные релизы v2026.3.1 и v2026.2.24 соответственно.

OpenClawRadar
Изоляция локальных ИИ-агентов с помощью микро-ВМ Firecracker
Безопасность

Изоляция локальных ИИ-агентов с помощью микро-ВМ Firecracker

Разработчик создал песочницу, которая изолирует выполнение ИИ-агентов внутри микро-ВМ Firecracker, работающих на Alpine Linux, решая проблемы безопасности, связанные с выполнением команд агентами напрямую на хост-машине. Конфигурация использует vsock для связи и подключается к Claude Desktop через MCP.

OpenClawRadar
Уязвимость удаленного выполнения кода в приложении Windows Notepad CVE-2026-20841
Безопасность

Уязвимость удаленного выполнения кода в приложении Windows Notepad CVE-2026-20841

CVE-2026-20841 — это уязвимость удаленного выполнения кода в приложении Блокнот Windows. Подробности и рекомендации по смягчению уязвимости доступны в руководстве обновления Центра реагирования на безопасность Microsoft.

OpenClawRadar