Неприятный сюрприз ожидает тех, кто привык неделями не закрывать крышку ноутбука.

В macOS обнаружили сбой, который долго не выдаёт себя, а затем почти мгновенно ломает работу сети. Если не перезагружать Mac 49 дней, 17 часов, 2 минуты и 47 секунд, система может перестать открывать новые TCP-соединения. Снаружи проблема выглядит странно: пинг проходит, старые соединения ещё живут, а всё, что требует нового подключения, постепенно замирает.
О находке рассказала команда Photon, которая использует парк компьютеров Mac для мониторинга сервиса iMessage. В конце марта этого года несколько машин после указанного выше времени непрерывной работы перестали устанавливать новые TCP-соединения. Перезагрузка вернула связь, но одновременно стало ясно, что сбой связан не с отдельным приложением, а с самой системой.
Специалисты проверили гипотезу на двух компьютерах, которые приближались к критической отметке. До наступления порога закрытые TCP-сессии в состоянии TIME_WAIT исчезали примерно через 30 секунд, как и положено в macOS. После переполнения внутреннего счётчика ситуация резко менялась: записи TIME_WAIT переставали очищаться и только накапливались. Через несколько часов число таких соединений доходило до тысяч, свободные временные порты заканчивались, а новые подключения застревали на этапе SYN_SENT.
Причину авторы отчёта связали с 32-битным переполнением в ядре XNU. Внутренний TCP-счётчик ведёт отсчёт в миллисекундах с момента загрузки системы. Когда значение достигает предела, происходит сброс к нулю, но проверка в коде не даёт таймеру продолжить отсчёт. В результате внутренние TCP-таймеры фактически останавливаются, а механизм очистки старых соединений перестаёт работать.
Команда Photon утверждает, что проблема воспроизводится стабильно и хорошо согласуется с давними жалобами пользователей Apple и отчётами из open-source-проектов, где после нескольких недель работы у macOS пропадала способность создавать новые TCP-соединения, хотя ICMP продолжал работать.
Обычные пользователи сталкиваются с такой ошибкой редко, поскольку обновления и штатные перезапуски обычно происходят раньше опасного срока. Под ударом оказываются прежде всего серверы на macOS, сборочные фермы, Mac mini в дата-центрах и рабочие станции, которые работают без перерыва неделями.
Пока что надёжного способа обойти сбой без перезагрузки не существует. Photon сообщила, что ищет точечное временное решение, но до появления исправления владельцам долго работающих Mac остаётся только одно — перезапускать машины заранее, не дожидаясь, пока внутренний таймер дойдёт до критической отметки.