Суть проблемы: данные исчезали бесследно
В релиз Linux 7.3-rc3 был включен критический фикс бага, существовавшего в ядре с июля 2023 года. Проблема затрагивала системы с включенными прозрачными огромными страницами (Transparent HugePages, THP) и ограничением ресурсов через cgroup. При определенных условиях — после вызова MADV_FREE и под давлением репрессии памяти (memory reclaim) — записи в пользовательское пространство могли теряться без предупреждения.
Это не теоретическая ошибка: инциденты зафиксированы в продакшене. В частности, пользователи библиотеки аналитики данных Polars столкнулись с потерей данных из-за данного дефекта ядра. Уязвимость проявлялась только при специфическом сочетании использования THP, вызовов MADV_FREE и высокой нагрузки на память.
Технические детали и исправление
Баг был введен в версии Linux 6.6 и оставался активным на протяжении трех лет. Исправление оказалось удивительно лаконичным: разработчикам потребовалось изменить всего одну строку кода. Патч был принят в рамках ветки x86/urgent и помечен для бэкпортирования во все поддерживаемые стабильные серии ядра.
Почему это важно для инфраструктуры
Проблема касается широкого круга серверных сред, где активно используются оптимизации памяти (THP) и управление ресурсами (cgroup), что типично для контейнеризованных сред (Docker, Kubernetes) и высоконагруженных баз данных. Потеря данных «на лету» без ошибок ввода-вывода делает диагностику такой проблемы крайне сложной до момента внедрения данного патча.
| Параметр | Значение / Описание |
|---|---|
| Версия ядра с багом | Linux 6.6 и новее (включая 7.3-rc3) |
| Дата введения бага | Июль 2023 |
| Условия воспроизведения | THP включены + cgroup limits + MADV_FREE + давление памяти |
| Объем исправления | 1 строка кода |
| Статус патча | Мерж в 7.3, бэкпорт в стабильные ветки |
Рекомендации к действию
- Администраторам серверов с тяжелыми нагрузками на память необходимо обновить ядро до версии 7.3 или применить бэкпортированный патч из стабильных веток.
- Разработчикам ПО, использующего
MADV_FREEдля оптимизации памяти, следует проверить корректность работы приложений после обновления ядра. - Пользователям библиотек вроде Polars рекомендуется обновить инфраструктуру для предотвращения повторения инцидентов с потерей данных.
Источник: Phoronix ↗
