Cloudflare : le bug de début d’année 2017

Cloudflare, le prestataire de DNS n’a pas apprécié l’ajout d’une seconde au temps universel à minuit le 1er janvier.

Surtout cette première seconde supplémentaire ajoutée à l’horloge universelle pour la faire correspondre à l’horloge astronomique. Vous vous rappelez du terrible « bogue de l’An 2000 » (celui qui n’a pas eu lieu) ? C’est un peu ce que le prestataire DNS a subi en ce début d’année.

La panne n’a pas été catastrophique, selon John Graham-Cumming, directeur technique de Cloudflare. Au pic de l’incident, seulement 0,2% des requêtes DNS à Cloudflare étaient affectées et moins de 1% de toutes les requêtes HTTP affichaient une erreur. Le problème ne touchait en effet que les clients de CloudFlare utilisant l’option CNAME.

Lorsque ces clients ne souhaitent pas que les résolveurs DNS ne renvoient pas directement vers une adresse IP, mais redirigent la recherche vers des alias de cette adresse IP, ils emploient un enregistrement CNAME. Ce qui oblige le logiciel RRDNS de Cloudflare a rechercher l’adresse IP originale en interrogeant les résolveurs DNS. Lesquels opèrent très rapidement, en quelques millisecondes.
Retour vers le futur

Et c’est à cet endroit que ça coince : un morceau de code de RRDNS, codé en Go, considérait que « la différence que la différence entre deux temps serait toujours, au minimum, zéro ». Or, avec l’ajout de cette seconde au temps universel, le moment où la requête était résolue pouvait être antérieur au moment où la requête était émise. La différence entre les deux temps est alors inférieure à zéro. Après plusieurs mesures lissées de RRDNS, le logiciel finit par penser que le résolveur fonctionne en temps négatif. Ce qui provoque quelques erreurs…

« La racine du bug qui a affecté notre service DNS est la croyance qu’on ne peut remonter le temps » souligne John Graham-Cumming. La correction était aisée : il a suffi de modifier un caractère du code, passant de « forcément égal à zéro » à « inférieur ou égal à zéro ». Le patch déployé, l’incident était considéré résolu à 6h45, UTC. Conclusion : Cloudfare peut désormais remonter le temps.

Soyez le premier à commenter

Poster un Commentaire

Votre adresse de messagerie ne sera pas publiée.


*