Lors de la migration de Firefox vers zlib-rs, les développeurs ont rencontré un bogue sur les CPU Intel.

L'organisation Trifecta Tech Foundation, qui développe des projets tels que ntpd-rs, sudo-rs, zlib-rs et bzip2-rs, a annoncé le passage de Firefox à l'utilisation de la bibliothèque zlib-rs pour la compression et la décompression à l'aide de la méthode gzip. En plus de protéger contre les problèmes causés par des erreurs de gestion de la mémoire, le passage de zlib à zlib-rs a entraîné une augmentation significative des performances — lors des tests effectués, l'accélération a varié de 3,3 à 32,5 fois pour des opérations individuelles de décodage et de 2,7 à 10,86 fois pour le décodage d'un flux continu.

La bibliothèque zlib-rs a été intégrée dans la version 151 de Firefox, mais après son intégration, certains utilisateurs ont rencontré un problème causant des plantages en raison d'un dépassement de limite. Il a été noté que dans le code Rust, le problème provoquait un arrêt d'urgence, tandis qu'en C, une situation similaire aurait entraîné des corruptions de données invisibles sans interruption du fonctionnement. En tant que solution, la version 151.0.1 a rétabli l'utilisation de l'ancienne bibliothèque zlib.

Le premier signe du problème a été aperçu lors des tests des premières versions il y a plus d'un an, mais il n'a pas pu être reproduit sur les systèmes des développeurs. En fin de compte, après un an de tests sur les utilisateurs des versions bêta, il a été décidé d'activer zlib-rs dans la version 151 de Firefox. Après une nouvelle série de rapports de problèmes et une analyse des motifs, il a été découvert que la panne était causée par une erreur dans le microcode des CPU Intel basés sur l'architecture Raptor Lake de 13e et 14e génération, liée à l'utilisation d'un registre incorrect.

Le problème survenait parce que le générateur de code LLVM utilisait l'instruction « mov byte ptr [rsi + rdi + 1], ch » lors de l'écriture en mémoire des résultats de l'encodage Huffman. Lors de l'exécution de cette instruction sur le CPU Raptor Lake, au lieu de 8 à 15 bits du registre RCX, correspondant à ce qui était spécifié par l'instruction dans le registre CH, des bits 0-7, correspondant au registre CL, étaient écrits en mémoire. Lors de la préparation de la version Firefox 152, l'erreur a été contournée et le correctif a été intégré dans la version principale de zlib-rs. La génération de l'instruction problématique a été observée dans LLVM 22 (dans la branche en développement LLVM 23, elle n'est pas générée).

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster