Lien Cloudflare : incident du 18-nov post mortem (un vilain unwrap en Rust) Posté par woffer đ§ (site web personnel) le 19 novembre 2025 Ă 08:43. Ătiquettes : postmortem cloudflare rust incident 15 19nov.2025 https://blog.cloudflare.com/18-november-2025-outage/
# «âŻun vilain unwrap en RustâŻÂ»
Posté par Ltrlg . Ăvalué à  7 (+7/-0).
⊠plus une requĂȘte SQL erronĂ©e et des dĂ©ploiements en prod sans tests (suffisants).
⊠et probablement quelques autres détails plus mineurs, vu que la liste de remédiation inclut des points non discutés.
[^] # Re: «âŻun vilain unwrap en RustâŻÂ»
Posté par Voltairine . Ăvalué à  5 (+3/-0).
La meilleure remĂ©diation est de na pas ĂȘtre
entiĂšrementdĂ©pendant de ce type de service (CLoudflare).[^] # Re: «âŻun vilain unwrap en RustâŻÂ»
Posté par raphj (site web personnel) . Ăvalué à  7 (+5/-0). DerniĂšre modification le 19 novembre 2025 Ă 14:07.
Pour moi, câest une partie de lâexplication seulement. Câest lâexplication technique du crash.
Mais le vrai âbugâ, Ă mon avis, câest quâune telle erreur de programmation ne devrait pas avoir une telle consĂ©quence. unwrap est au cĆur de cet incident, mais nâest pas le cĆur du problĂšme.
Pour moi, le problĂšme est organisationnel ou architectural en premier lieu.
Dâabord, on pourrait imaginer des rĂšgles de programmations qui interdisent les unwrap, avec une vĂ©rification statique du code qui impose leur application. On peut imaginer quâils vont ajouter ce genre de vĂ©rification pour ce type dâerreur suite Ă lâincident. Ăa, câest une solution technique pour tuer une telle erreur dans lâĆuf, mais ça ne fait pas tout.
On pourrait imaginer une revue attentive obligatoire pour augmenter les chances dâattraper plus dâerreurs, dont celles qui ne peuvent pas ĂȘtre remarquĂ©es par la vĂ©rification statique ou les tests automatiques. Câest une des solutions organisationnelles possibles.
Ăa ne fait toujours pas tout, dâailleurs jâimagine quâils ont dĂ©jà ça, or, lâerreur est passĂ©e quand-mĂȘme. Dans tous les cas, il y aura toujours des erreurs de programmations qui passeront, tant que le code nâest pas vĂ©rifiĂ© formellement et exhaustivement (ce qui ne serait probablement pas rĂ©aliste, si câest mĂȘme possible).
Donc lĂ , lâarchitecture de Cloudflare devrait ĂȘtre conçue pour ĂȘtre tolĂ©rante Ă ce genre de bugs, avec un dĂ©ploiement progressif des Ă©volutions du code ou des configurations. On peut supposer quâil y a de la redondance chez Cloudflare, et quâil serait possible de dĂ©ployer la plupart des changements sur certains nĆuds, et les choses continuent Ă fonctionner quand ils tombent en panne. Et on stoppe le dĂ©ploiement si on constate des crashes Ă ce niveau.
Et toutes les solutions architecturales et organisationnelles pour limiter les erreurs humaines et sinon leurs conséquences.
Câest Ă©videmment plus facile Ă dire quâĂ faire. Dâun autre cĂŽtĂ©, câest spĂ©cifiquement le cĆur de mĂ©tier de Cloudflare. Et ce qui est un peu prĂ©occupant, câest quâil nâest fait mention que des solutions techniques dans leur section Remediation and follow-up steps. Câest bien dâĂ©viter le genre dâerreur quâon vient de rencontrer Ă lâavenir, mais aucune amĂ©lioration du processus de dĂ©ploiement nâest mentionnĂ©e, ou autre amĂ©lioration visant Ă gĂ©rer les erreurs de programmations ou autres erreurs humaines qui passent inĂ©vitablement les filtres. On peut espĂ©rer que câest juste quâils ne communiquent pas lĂ -dessus pour une raison qui mâĂ©chappe.
[^] # Re: «âŻun vilain unwrap en RustâŻÂ»
Posté par thoasm . Ăvalué à  4 (+1/-0).
Au delà de ça ça pose la question de l'environnement de test.
Pour une infra critique comme celle lĂ on aurait pu penser que l'infra de test soit un minimum complĂšte par rapport Ă la prod, vu que c'est critique. Je me trompe probablement mais j'ai l'impression qu'un tel bug aurait pu ĂȘtre dĂ©tectĂ© dans les tests si les volumes de donnĂ©es de test et les serveurs simulĂ©s sont dimensionnĂ©s de maniĂšre crĂ©dible par rapport Ă la prod ?
[^] # Re: «âŻun vilain unwrap en RustâŻÂ»
Posté par raphj (site web personnel) . Ăvalué à  3 (+1/-0). DerniĂšre modification le 19 novembre 2025 Ă 14:22.
Oui, en effet. L'environnement de test est une solution technique et organisationnelle qu'on imagine déjà en place pour attraper ce genre de chose.
[^] # Re: «âŻun vilain unwrap en RustâŻÂ»
Posté par totof2000 . Ăvalué à  9 (+7/-0).
D'un autre cĂŽtĂ©, vu leur taille, est-e qu'il est possible d'avoir un environnement de test qui simule tous les cas possibles et imaginables rencontrĂ©s sur un environnement de prod ? Je pense que ça doit ĂȘtre bien diffcicile. Et mĂȘme si c'est faisable, il faut penser justement Ă tous ces cas possible et les simuler.
Autrement dit, des tests c'est bien, mais les tests ne sont pas la garantie absolue de ne jamais rencontrer de bugs. On réduit juste la probabilité de les rencontrer.
[^] # Re: «âŻun vilain unwrap en RustâŻÂ»
Posté par bbo . Ăvalué à  8 (+6/-0). DerniĂšre modification le 19 novembre 2025 Ă 14:51.
Est-ce vraiment possible chez Cloudflare ?
Edit : pour le dire autrement, comment simuler 20% du trafic mondial de maniÚre crédible ?
[^] # Re: «âŻun vilain unwrap en RustâŻÂ»
Posté par Gil Cot â (site web personnel, Mastodon) . Ăvalué à  1 (+1/-2).
Cloudflare, encore un autre gĂ©ant aux pieds dâargile, comme CrowdsecâŠ
âIt is seldom that liberty of any kind is lost all at once.â â David Hume
# ~~Prem's~~
Posté par Faya . Ăvalué à  4 (+6/-4). DerniĂšre modification le 19 novembre 2025 Ă 13:00.
J'Ă©tais venu Ă©crire un journal avec le mĂȘme lien et le titre
Mais tu m'as dĂ©passĂ© avec ta version bien moins trollifĂšre. Dommage, je voulais voir les rustacĂ©es sortir les pinces pour enfoncer des portes ouvertes ("Non mais en fait Rust ne peut pas t'empĂȘcher de coder n'importe comment et en plus
unwrapne devrais pas arriver en prod, comme le dit le créateur de LinuxFR.")[^] # Re: ~~Prem's~~
Posté par Gil Cot â (site web personnel, Mastodon) . Ăvalué à  0 (+4/-6).
Et au vu des commentaires dâun prĂ©cĂ©dent journal, les cRUSTacĂ©s vont tâexpliquer que malgrĂ© les bogues quâils crĂ©ent ils sont automagiquement plus sĂ»r parce-que câest comme ça.
âIt is seldom that liberty of any kind is lost all at once.â â David Hume
[^] # Re: ~~Prem's~~
Posté par kantien . Ăvalué à  3 (+1/-0). DerniĂšre modification le 21 novembre 2025 Ă 17:31.
Et pourtant, ils le sont (plus sûrs) !
LĂ , c'est un exemple typique de ce que j'expliquais quand je disais que les programmeurs faisaient de l'axiomatique sans le savoir (API, c'est Axiomatique Pour Informaticien).
Le type
Result <T,E>est l'équivalent logique d'une disjonction : on a un résultat de typeTou une erreur de typeE. L'axiomatique minimale et complÚte pour ce type est celle-ci :J'ai utilisé la syntaxe OCaml que je maßtrise mieux. Mais l'idée est qu'avec seulement ces 3 fonctions on peut implémenter toute l'API du type
Result. Par exemple, le traitunwrapincriminĂ© s'implĂ©mente ainsi :oĂč
idest la fonction identité qui renvoie son argument etpanicc'est ce qui est arrivé en cas d'erreur.Que ces trois fonctions suffisent, on le doit à Gödel (théorÚme de complétude) et Gentzen (déduction naturelle). Le type de ces trois fonctions correspondent aux rÚgles de la déduction naturelle pour la disjonction : les deux premiÚres sont les rÚgles d'introduction de la disjonction (comment produire un
Result) et la troisiÚme à la rÚgle d'élimination (comment consommer unResult).Ce qu'il y a, c'est que
unwrap, qui de fait appelpanic, ne doit ĂȘtre utiliser que sur des erreurs irrĂ©cupĂ©rables ! Il est peu probable que ce soit le cas ici, etunwrapn'aurait jamais du se trouver dans le code. C'est un bug de gestion d'erreurs, comme un exception non rattrapĂ©e mais qui aurait du l'ĂȘtre.Un programmeur C aurait pu faire de mĂȘme :
mais lĂ oĂč
unwrapapporte tout de mĂȘme une sĂ©curitĂ© mĂ©moire, c'est qu'il ne dĂ©rĂ©fĂ©rencera jamais un pointeurNULL, lĂ oĂč un programmeurCpeut oublier d'Ă©crire le test. La fonctionfold(rĂšgle d'Ă©limination, rĂšgle d'usage) exige un traitement pour le cas des erreurs, traitement qui dans le cas deunwrapest unpanic. Cette exigence n'existe ni en C, ni en C++. ;-)Le cas des pointeurs est en fait Ă©quivalent au type
Option, qui lui-mĂȘme est Ă©quivalent au typeResultoĂč le typeEdes erreurs est un singleton.AprĂšs, si tu regardes les rĂšgles sur l'absurde sur la page wikipdĂ©ia (ce qui se passe ici, il y a une erreur parce que l'entrĂ©e est contradictoire avec les conditions dont Ă besoin la fonction pour avoir un rĂ©sultat), en rĂ©flĂ©chissant un peu tu pourras te convaincre que les rĂšgles la concernant correspondent au fonctionnement des exceptions (en particulier le raisonnement par l'absurde qui dĂ©charge l'hypothĂšse, c'est lever un exception avec sa backtrace : la sĂ©rie de raisonnement qui ont mener Ă la contradiction).
Mais pour gérer les exceptions avec le type
Result, il faut utiliser le?en Rust. C'est la façon idiomatique d'utiliser ce que les programmeurs fonctionnels appellent lebind:Autrement dit on applique le traitement
fen cas de succÚs et on fait remonter les erreurs à l'appelant, charge à lui de gérer l'erreur (si possible sanspanic).Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des LumiÚres.
[^] # Re: ~~Prem's~~
Posté par Gil Cot â (site web personnel, Mastodon) . Ăvalué à  3 (+1/-0).
Justement, tu prĂ©cises « sĂ©curitĂ© mĂ©moire » ; ce nâest pas sĂ©curitĂ© tout court⊠(ou toute la sĂ©curitĂ©) Et lâusage apparemment irraisonnĂ©e de
unwrapici a conduit au crash, malgrĂ© les crĂ©dos.âIt is seldom that liberty of any kind is lost all at once.â â David Hume
[^] # Re: ~~Prem's~~
Posté par kantien . Ăvalué à  2 (+0/-0).
Et c'est ce que prĂ©tend apporter, Ă raison, le langage Rust. Il n'a jamais prĂ©tendu ĂȘtre la panacĂ©e contre tous les types de bugs. L'erreur du
unwrappeut se reproduire dans les autres langages, mais leurs bugs mémoires n'ont pas d'équivalents en Rust.Ceux qui cherchent à troller Rust inventent un adversaire imaginaire : ils combattent un homme de paille.
Sapere aude ! Aie le courage de te servir de ton propre entendement. VoilĂ la devise des LumiĂšres.
[^] # Re: ~~Prem's~~
Posté par kantien . Ăvalué à  2 (+0/-0). DerniĂšre modification le 21 novembre 2025 Ă 17:45.
J'ai oublié,
panicc'est la rÚgle d'élimination de l'absurde : le programmeur est tombé sur une contradiction, et au lieu de chercher à la comprendre, pour proposer une solution, il a paniqué. ;-)Pour pouvoir valider le type de
unwrap, il faut quepanicproduise le typeTque l'on a en cas de succÚs, quelque soit le typeEdes erreurs. Le type depanicproduit le type qu'il veut en sortie quelque soit son type d'entrée, c'est à dire l'élimination de l'absurde ou le principe ex falso quodlibet (du faux, fait ce qu'il te plait).Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des LumiÚres.
Envoyer un commentaire
Suivre le flux des commentaires
Note : les commentaires appartiennent Ă celles et ceux qui les ont postĂ©s. Nous nâen sommes pas responsables.