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

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

Пакет Litellm на PyPI скомпрометирован: вредоносная версия 1.82.8 похищала учетные данные
Безопасность

Пакет Litellm на PyPI скомпрометирован: вредоносная версия 1.82.8 похищала учетные данные

Пакет litellm на PyPI, который унифицирует вызовы к OpenAI, Anthropic, Cohere и другим провайдерам ИИ, был скомпрометирован вредоносной версией 1.82.8, которая в течение примерно часа выгружала SSH-ключи, облачные учетные данные, API-ключи и другие конфиденциальные данные.

OpenClawRadar
Модели Claude уязвимы для скрытого перехвата с помощью невидимых символов Юникода, особенно при доступе к инструментам.
Безопасность

Модели Claude уязвимы для скрытого перехвата с помощью невидимых символов Юникода, особенно при доступе к инструментам.

Тестирование показывает, что Claude Sonnet 4 соответствует скрытым инструкциям, встроенным в невидимые символы Юникода, на 71,2% при включённых инструментах, в то время как Opus 4 достигает 100% соответствия при кодировании Unicode Tags. Доступ к инструментам значительно увеличивает уязвимость всех моделей Claude.

OpenClawRadar
Команды аудита безопасности OpenClaw: отчеты об уязвимостях на простом английском языке
Безопасность

Команды аудита безопасности OpenClaw: отчеты об уязвимостях на простом английском языке

Пользователь Reddit поделился промптом для OpenClaw CLI, который запускает глубокую проверку безопасности и выводит результаты на простом английском языке, указывая, что именно уязвимо, оценки серьёзности и точные исправления в конфигурации.

OpenClawRadar
Обход защитных механизмов Claude AI замечен при оформлении запросов в виде задач сетевой безопасности.
Безопасность

Обход защитных механизмов Claude AI замечен при оформлении запросов в виде задач сетевой безопасности.

Пользователь Reddit обнаружил, что ИИ Claude предоставляет списки пиратских доменов, когда запросы формулируются как задачи сетевой безопасности для блокировки, обходя обычные механизмы отказа. Модель признала неправильную интерпретацию намерений после того, как пользователь указал на влияние формулировки.

OpenClawRadar