4 часа назад
Дефект прятался 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. Поддержать меня можно подпиской на канал "сбежавшая нейросеть", где я рассказываю про ИИ с творческой стороны.
Читают сейчас
1 час назад
Разаботчик кабелей «Инкаб» разместил акции на 2,04 млрд рублей и стартовал торги на Мосбирже
Производитель оптических кабелей «Инкаб Холдинг» привлёк 2,04 млрд рублей в процессе первичного размещения акций на Московской бирже. Компания разместила почти 20,4 млн акций по цене 100 рублей за бум

1 час назад
В AirDrop нашли уязвимости, позволяющие временно отключать функции экосистемы Apple
Исследователи из CISPA Helmholtz Center for Information Security нашли серию уязвимостей в AirDrop и Quick Share — встроенных механизмах беспроводной передачи файлов в экосистемах Apple и Samsung. С и

1 час назад
Anthropic изучила психологию Claude Sonnet 5: вот что не устраивает схема в ее же правилах
В карте безопасности Claude Sonnet 5, опубликованной Anthropic вместе с релизом модели, есть отдельный раздел про "благополучие" (model welfare) — серию тестов о том, как схема относится к собственным

3 часа назад
Claude Sonnet 5: Anthropic обновили главную рабочую лошадку
Anthropic выпустили Claude Sonnet 5. Главный тезис: модель класса Sonnet в начальный раз вплотную приближается к Opus 4.8 на агентных задачах — и одновременно стоит в 1,5-2 раза дешевле. Ознакомиться

3 часа назад
Вышел Claude Sonnet 5 — почти как Opus 4.8, но дешевле
Anthropic выпустила Claude Sonnet 5 — схема среднего тира, которая, по замерам самой компании, вплотную подошла к ее флагману Opus 4.8, но стоит заметно дешевле. Sonnet 5 доступна с сегодняшнего дня в