Les Mac perdent leur connexion réseau après 49 jours, 17 heures, 2 minutes et 47 secondes
Retour vers le futur, en version 32 bits
© Francisco De Legarreta C. (Unsplash)
Le 10 avril à 08h45
Au bout de 49 jours, 17 heures, 2 minutes et 47 secondes, un Mac resté allumé tout ce temps commencera à perdre sa connexion réseau. La seule solution ? Le redémarrage de l’ordinateur. En cause : un problème d’horloge interne…
Les Mac perdent leur connexion réseau après 49 jours, 17 heures, 2 minutes et 47 secondes
Retour vers le futur, en version 32 bits
© Francisco De Legarreta C. (Unsplash)
Au bout de 49 jours, 17 heures, 2 minutes et 47 secondes, un Mac resté allumé tout ce temps commencera à perdre sa connexion réseau. La seule solution ? Le redémarrage de l’ordinateur. En cause : un problème d’horloge interne…
Logiciel
Logiciel
5 min
Une « bombe à retardement », c’est ainsi que Photon, un service qui connecte des agents IA à iMessage d’Apple, qualifie sa découverte sur Mac. L’image est parlante, mais un rien exagérée car il suffit d’un redémarrage pour que tout revienne à la normale. Néanmoins, cette « date d’expiration » peut représenter un sérieux problème dans les organisations qui ont besoin de faire tourner des Mac en continu.
Une horloge interne en panique
Le noyau XNU de macOS en charge des ressources du Mac, s’appuie sur un compteur interne pour suivre le temps dans la gestion des connexions réseau, sous la forme d’un entier non signé sur 32 bits. Il peut donc contenir des valeurs allant de 0 à 4 294 967 295 (2³²). Si on se sert d’un entier non signé de 32 bits pour compter le temps en millisecondes, le compteur peut donc aller jusqu’à 4 294 967 secondes, soit 49 jours, 17 heures, 2 minutes et 47 secondes. Au-delà ? Ça dépend des cas : retour à zéro, plantage…
Photon a découvert que sur Mac, une vérification mal conçue dans le noyau empêche le système de reconnaître correctement ce basculement après les 49 jours, 17 heures… Tant que le compteur peut augmenter, tout fonctionne normalement. Mais quand il atteint sa limite et repart de zéro, la machine se grippe. macOS considère alors, à tort, que le nouveau temps est « inférieur » à l’ancien et refuse de l’enregistrer.
Le sujet n’est pas nouveau et largement documenté. On le trouve par exemple dans le bug de l’an 2038 sur Linux. Un petit changement sur Debian depuis la version 13 a permis de résoudre le souci : la distribution utilise le format 64 bits (au lieu de 32 bits), de quoi repousser l’échéance de… 292 milliards d’années. Si on remonte dans le temps à l’époque de Windows 95, certains se souviendront peut-être que le système plantait aussi après 49,7 jours d’utilisation.
Résultat, l’horloge TCP reste figée à sa dernière valeur valide. Tous les mécanismes qui dépendent du temps, à l’image de la suppression des connexions fermées, cessent de fonctionner normalement. Il en va ainsi des ressources réseau qui dépendent des connexions TCP : elles s’accumulent jusqu’à saturation, ce qui rend impossible l’ouverture de nouvelles connexions.
Le redémarrage, ultime solution pour l’instant
Photon s’est rendu compte du problème en surveillant sa flotte de Mac qui font tourner plusieurs services iMessage. Des machines qui fonctionnent 24/7 et ne redémarrent qu’en cas de nécessité absolue. Plusieurs de ces Mac ont cessé d’établir de nouvelles connexions TCP 49,7 jours après leur dernier redémarrage.
« Les pings continuaient de fonctionner. Les connexions existantes restaient actives. Mais toute tentative nécessitant l’ouverture d’un nouveau socket TCP échouait », écrit le service. Seule solution : un redémarrage. Cela concerne donc les Mac fonctionnant en continu pendant plus de 49 jours et 17 heures sans redémarrer et qui ont une activité réseau TCP (tous les Mac connectés, au fond).
Selon Tidbits, il semblerait que le bug soit circonscrit à macOS Tahoe, la dernière version du système d’exploitation (macOS 26). Les précédentes moutures de l’OS ne seraient pas affectées, ce qui explique pourquoi le problème n’a jamais été remonté auparavant. Photon de son côté laisse entendre que le bug pourrait remonter à Catalina… Apple ne s’est pour le moment pas exprimé.
Par ailleurs, un Mac en veille devrait aussi repousser l’échéance fatale. De plus, sur un ordinateur peu sollicité, l’épuisement des ports peut aussi mettre beaucoup plus de temps pour devenir perceptible. Pour le grand public, ce n’est pas nécessairement un bug handicapant : même si l’habitude d’éteindre son ordinateur tous les soirs en partant du bureau s’est perdue, il arrive tout de même assez régulièrement de devoir redémarrer sa machine. Ne serait-ce que pour installer une mise à jour du système.
Pour savoir depuis quand un Mac est allumé, il suffit de saisir la commande uptime dans un Terminal :
Ce compteur défectueux posera davantage de problème dans des environnements professionnels, comme c’est le cas chez Photon mais aussi dans des entreprises qui se servent de Mac Pro ou de Mac Studio pour des tâches très longues (rendu, compilation, simulation…) ou au sein de structures hébergeant des Mac en colocation administrés à distance.
Ou encore dans les fermes de Mac mini pour le partage de calcul ou les infrastructures de test. Néanmoins, ces services évitent de faire tourner leurs serveurs Mac avec la version la plus à jour de macOS, pour des questions de sécurité et de fiabilité. Il n’empêche qu’il s’agit tout de même là d’un bug qu’Apple serait avisée de corriger rapidement.
Commentaires (25)
Abonnez-vous pour prendre part au débat
Déjà abonné ou lecteur ? Se connecter
Cet article est en accès libre, mais il est le produit d'une rédaction qui ne travaille que pour ses lecteurs, sur un média sans pub et sans tracker. Soutenez le journalisme tech de qualité en vous abonnant.
Accédez en illimité aux articles d'un média expert
Profitez d'au moins 1 To de stockage pour vos sauvegardes
Intégrez la communauté et prenez part aux débats
Partagez des articles premium à vos contacts
Abonnez-vousLe 10 avril à 08h53
Impossible on avait un BSOD bien avant 😁😁😁
Le 10 avril à 09h57
Modifié le 10 avril à 15h49
Idem au bout du nombre de jours, la pile réseau lâchait ==> reboot.
On l'a vu sur les Hosts qui n'étaient pas patchés
Troll : Comme quoi un 2008 est plus fiable qu'un MacOS
Edit : J'ai retrouvé, 248 jours si l'offloading est utilisé (les joies du début de Chimney...), 497 sinon.
Le 10 avril à 15h31
Nous avions à l'époque (1997) écrit un logiciel de monitoring qui était censé tourner en continu, et la cible était Windows 95. Ce machin n'avait pas la notion de service donc toute l'application tournait comme des exécutables Windows et se minimisaient dans la traybar. Et ça incluait un serveur Personal Oracle 7, de la connexion réseau (des envois d'e-mail et autres popups via la fonction Windows dédiée, etc.)
En lisant la doc, on a donc bien évidemment tiqué sur ce compteur 32 bits en millisecondes, et on a ajouté un garde-fou qui commençait à conseiller aux utilisateurs de rebooter la machine si on se rendait compte qu'elle avait démarré il y a plus que 40 jours. Au bout de 3 mois les utilisateurs nous ont demandé d'enlever cette notification qui les enquiquinait tous les jours...
Y'avait certes des logiciels ou drivers tiers qui se plantaient (le lien parle de vtdapi.vxd mais y'en avait évidemment d'autres) et entraînaient tout Windows avec eux (et merci de ne pas rigoler rétrospectivement sur le fait que l'OS n'est pas sécurisé par design - à l'époque un Mac, ou Novell Netware, se plantaient taut autant si un driver faisait des siennes), mais le système lui-même n'avait pas cette limitation, et apparemment notre application n'était pas affectée...
Le 10 avril à 08h53
Le 10 avril à 09h04
C'est décidé par le SLA.
Quoiqu'il en soit, même allumé en continu, le Mac va avoir besoin de faire des mises à jour régulières, et donc de rebooter. Le mythe de l'OS qui ne reboot absolument jamais et l'uptime de 3 ans, c'était valable y'a une décennie. Aujourd'hui, vu combien une politique de patch management est indipensable en matière de sécu IT, cette idée n'a plus aucun sens.
Le 10 avril à 09h30
Il me semble même que Ubuntu server s'en sert.
Modifié le 10 avril à 10h03
Mais, encore une fois, si on estime que la dispo doit être de 99.999%, on met de la redondance.
Pour info, un SLA de 99.9% tolère 1 min 26 secondes d'indispo quotidienne. Soit le temps de reboot d'une machine...
Le 10 avril à 12h01
Modifié le 10 avril à 12h47
Edit : un mac (pour rester dans le sujet) ça reboot super vite
Le 10 avril à 12h47
Le 10 avril à 13h06
Le 10 avril à 18h45
Le 10 avril à 16h30
Le 10 avril à 16h55
Modifié le 10 avril à 10h08
C'est intégré à Ubuntu, il me semble aussi dispo sous RedHat.
Un reboot reste nécessaire pour upgrader le kernel, ce qui est utile pour bénéficier d'améliorations sans rapport avec la sécurité.
kexec est une piste pour accélérer les reboot, surtout sur les serveurs, car ça permet de changer de kernel sans redémarrer "à froid" et donc en bypassant tout l'init hardware qui peut prendre plusieurs minutes.
Modifié le 11 avril à 03h55
Uptime funk
live patching hallelujah !
Le 13 avril à 08h26
Côté Linux c'est le gestionnaire de màj de la distribution qui ne s'embête pas à l'intégrer, j'imagine que l'effort de dev est important pour un ROI factuellement null pour un end-user desktop linux. (tu restes sur l'ancien kernel jusqu'au prochain reboot)
Côté serveur il y'a un cas d'usage : tu peux rester à la fois dispo et parfaitement à jour...
C'est incroyable de voir l'écart avec d'autres OS :
J'ai quand même l'impression que c'est exactement le même bug que celui de Windows 95 : overflow d'un compteur d'uptime en millisecondes stocké dans un entier 32bits
Le 10 avril à 16h53
Modifié le 10 avril à 20h09
C'est du basique en matière de clustering et de haute dispo.
Et dans le cas d'un actif / actif, bah généralement on évite de mettre en maintenance les deux noeuds en même temps.
Le 13 avril à 07h51
Le 10 avril à 09h08
(Et oui, il reste toujours allumé car j'y accède régulièrement à distance et il fait aussi un peu serveur...)
Modifié le 10 avril à 11h33
C'est bon à savoir, par ex. pour ceux qui utilisent des Mac dans une ferme d'intégration continue (ces machines tournent typiquement en permanence, mais sans les mécanismes de redondance d'un service avec SLA), ou de manière générale comme serveur pour des services internes ou perso.
Ça peut faire perdre beaucoup de temps de comprendre pourquoi la machine de CI macOS arrête de fonctionner.
Le 10 avril à 11h59
Le 10 avril à 14h30
Signaler un commentaire
Voulez-vous vraiment signaler ce commentaire ?