30 июня 2026, 20:31
Дефект прятался 18 лет: OpenAI нашла его в окне шириной в одну инструкцию

OpenAI рассказала, как нашла гонку потоков (race condition), которая 18 лет незаметно жила в GNU libunwind — одной из самых распространенных библиотек для раскрутки стека. Самое абсурдное в этом баге — ширина окна, в котором он срабатывает: буквально одна процессорная инструкция, порядка 100 пикосекунд. На таком масштабе казалось, что он слишком редкий, чтобы вообще проявляться. Но на нагрузке OpenAI это выливалось в больше десятка падений в день.
Все началось с "невозможных" крашей в Rockset — C++-инфраструктуре поиска, которую OpenAI купила в 2024 году и использует в ChatGPT для работы с данными и поиска по перепискам. Обычная функция завершалась и возвращалась не туда: иногда по нулевому адресу, иногда указатель стека оказывался смещен на 8 байт. Так нормальный код просто не падает. Для каждой гипотезы у инженеров находилось опровержение, и баг выглядел невозможным.
Перелом случился, когда команда сменила оптику. Сначала они отлаживали как врач: брали один кор-дамп и пытались поставить диагноз по детальным уликам. Это не работало. Тогда подход поменяли на эпидемиологический — просматривать не на отдельный случай, а на всю популяцию крашей. Скрипт, который скачал и разметил все дампы памяти Rockset за год, создал текст сам ChatGPT. На чистых данных корреляции проявились мгновенно: то, что считали одним багом, оказалось двумя независимыми. Первый — тихий аппаратный ошибка: чип на одном хосте Azure буквально неправильно считал. Второй — та самая гонка в libunwind.
Сам уязвимый исходник появился еще в 2007–2008 годах — в первой версии libunwind с поддержкой раскрутки C++-исключений для x86_64 — и все это время спокойно работал. Механизм libunwind можно описать просто. Механизм libunwind можно описать просто. Когда C++ обрабатывает удаление, рантайм "раскручивает" стек и восстанавливает регистры. В этот момент набор модулей меняет указатель стека — и ровно на одну инструкцию структура с адресом, куда нужно вернуть управление, оказывается за пределами зоны, которую движок обещает не трогать. Если именно в этот зазор прилетает системный сигнал, движок затирает эту память, и адрес возврата превращается в NULL. У OpenAI баг вылез только сейчас, потому что нагрузка Rockset необычна: он кидает весьма множество исключений, весьма часто шлет сигналы, а недавнее изменение заставило обработчик сигнала занимать больше стека. Произведение этих факторов перешло порог видимости.
В качестве лечения OpenAI пересела с GNU libunwind на механизм раскрутки стека из libgcc, а в саму библиотеку отправила воспроизводимый пример и фикс. Но главный вывод инженеры выносят не про ассемблер и не про устройство сигналов. Историю раскрыло не озарение, а качественные информация: пока два разных явления смешивали в одно, найти связное объяснение было невозможно. Как только данные стали лучше, отладка стала простой.
P.S. Поддержать меня можно подпиской на канал "сбежавшая нейросеть", где я рассказываю про ИИ с творческой стороны.
Читают сейчас

2 часа назад
В США предъявили обвинения россиянину в заражении компьютеров более 80 тысяч фрилансеров вредоносным ПО
Коллегия присяжных в штате Калифорния предъявила обвинения 40-летнему гражданину России Серажудину Актулаеву за участие в фишинговой кампании, в результате которой компьютеры 80 тыс. фрилансеров были
3 часа назад
Лиды по осени считают: 6 мероприятий для продуктивного сентября
Осенью прогноз простой: где-то обязательно польет. С рекламным рынком сложнее. Где подорожает лид? Какой канал упрется в потолок? Сработает ли UGC? Что уже можно поручить ИИ? И какие изменения в закон

3 часа назад
Организация Postgres Professional первой среди коммерческих форков закрыла критические уязвимости PostgreSQL
Postgres Professional выпустила «нулевые» релизы корпоративных редакций СУБД Postgres Pro с исправлениями актуальных уязвимостей PostgreSQL. Компания первой и пока единственной среди коммерческих форк

3 часа назад
Дайджест GetAClass: август 2026
Поздравляем всех с началом нового учебного года! Каникулы закончились – значит, пора подвести итоги последнего летнего месяца. Читать далее

4 часа назад
НАСА выбрало компанию Blue Origin в качестве поставщика телекоммуникационной сети для Марса
Американское космическое агентство заключило с Blue Origin контракт на разработку Mars Telecommunications Network — системы обеспечения высокоскоростной связи и навигации для текущих и будущих миссий