В операционной системе macOS выявлена ошибка, затрагивающая сетевой стек и проявляющаяся только при длительной непрерывной работе системы. Проблема возникает примерно через 49 дней и 17 часов аптайма, после чего система начинает некорректно обрабатывать новые сетевые соединения.
Исследователи из Photon обнаружили, что после достижения указанного времени система продолжает поддерживать уже установленные соединения, однако перестаёт корректно инициировать новые. В ходе анализа выяснилось, что источник сбоя связан со счётчиком tcp_now, используемым TCP-стеком для отслеживания времени с момента загрузки системы.
Оказалось, что tcp_now реализован как 32-битное значение, измеряющее время в миллисекундах. При длительной работе системы счётчик достигает максимального значения и происходит переполнение ровно в районе 49-дневного периода.
После переполнения нарушается обработка сроков жизни закрытых TCP-соединений. Они перестают корректно удаляться, постепенно накапливаются и начинают потреблять системные ресурсы, что в итоге приводит к деградации сетевой подсистемы.
На данный момент единственным способом восстановления работоспособности сети остаётся перезагрузка системы. Ожидается, что Apple устранит проблему в будущих обновлениях macOS, чтобы исключить подобные ограничения при длительной непрерывной работе.
Источник: www.goha.ru