В macOS обнаружена ошибка на уровне ядра, из-за которой система перестает устанавливать новые сетевые соединения после примерно 49 дней непрерывной работы устройства.
Проблема связана с переполнением 32-битного целочисленного счетчика в ядре XNU. Этот счетчик используется в TCP/IP-стеке для отслеживания времени в миллисекундах с момента загрузки системы. Максимальное значение такого счетчика составляет 4 294 967 295, что соответствует примерно 49 дням, 17 часам, 2 минутам и 47 секундам.
После достижения этого значения счетчик должен сброситься, однако дополнительная проверка монотонности блокирует корректный переход к нулю. В результате внутренние таймеры TCP зависают, и система больше не может корректно обрабатывать состояние соединений.
Это приводит к тому, что закрытые соединения не удаляются. Они остаются в состоянии TIME_WAIT и продолжают занимать временные порты. Со временем все доступные порты исчерпываются, и стек TCP/IP перестает принимать новые подключения.
При этом уже установленные соединения могут продолжать работать, что усложняет диагностику. Устройство может отвечать на ping, но любые новые сетевые запросы начинают завершаться с ошибками или вовсе не выполняются.
Исследователи из Photon воспроизвели проблему в контролируемых условиях. При достижении порога в 49,7 дня системы стабильно переставали инициировать новые подключения без каких-либо сообщений об ошибке.
На данный момент Apple не выпустила исправление. Единственный способ восстановить работоспособность сети это перезагрузить устройство. Однако это временное решение: после следующего непрерывного периода в 49 дней проблема повторяется.
Источник: TechSpot