Gjatë përkthimit të Firefox në zlib-rs, zhvilluesit u përballën me një gabim në CPU Intel

Organizata Trifecta Tech Foundation, e cila zhvillon projekte si ntpd-rs, sudo-rs, zlib-rs dhe bzip2-rs, njoftoi për kalimin e Firefox në përdorimin e bibliotekës zlib-rs për kompresimin dhe dekompresimin duke përdorur metodën gzip. Përveç mbrojtjes nga problemet të shkaktuara nga gabimet gjatë punës me memorie, kalimi nga zlib në zlib-rs solli një rritje të dukshme të performancës - në testet e kryera, përshpejtimi ishte nga 3.3 deri në 32.5 herë për operacione të veçanta dekompresimi dhe nga 2.7 deri në 10.86 herë për dekompresimin e një fluksi të vazhdueshëm.

Biblioteka zlib-rs u përdor në lëshimin e Firefox 151, por pas integrimit të saj, disa përdorues u përballën me një problem që çoi në ndalesë të papritur për shkak të daljes jashtë kufijve të lejuar. Raportohet se në kodin e gjuhës Rust problemi shkaktoi ndalesë të papritur, ndërsa në C një situatë e tillë do të kishte çuar në dëmtim të padukshëm të të dhënave pa ndaluar funksionimin. Si zgjidhje, në lëshimin 151.0.1 u rikthye përdorimi i bibliotekës së vjetër zlib.

Manifestimi i parë i problemit u vërejt gjatë testimit të ndërtimeve të hershme më shumë se një vit më parë, por në sistemet e zhvilluesve nuk kishte mundur të riprodhohej. Në fund, pas një viti testimi në përdoruesit e lëshimeve beta, u vendos të aktivizohet zlib-rs në versionin e lëshimit të Firefox 151. Pas një serie të re raportesh për problemet dhe analizës së zakonshmërive, u zbulua se dështimi ishte shkaktuar nga një gabim në mikrokodet e CPU Intel bazuar në mikroarkitekturën Raptor Lake të brezit të 13 dhe 14, i lidhur me përdorimin e një regjistri të gabuar.

Problemi ndodhi sepse gjeneratori i kodit LLVM dhezoi instruktionin "mov byte ptr [rsi + rdi + 1], ch" gjatë shkruarjes në memorie të rezultateve të kodimit me Huffman. Gjatë ekzekutimit të këtij instruksioni në CPU Raptor Lake, në vend të 8-15 bitëve nga regjistri RCX, përkatësisht nga regjistri CH i specifikuar në instruktion, në memorie ishin shkruar bitët 0-7, që i përkasin regjistrit CL. Gjatë përgatitjes së lëshimit të Firefox 152, gabimi u rregullua për kalimin dhe patch-u u transferua në përbërjen kryesore të zlib-rs. Generimi i instrukcionit problematik u vërejt në LLVM 22 (në degën në zhvillim të LLVM 23 ai nuk krijohet).

Burimi: opennet.ru

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster