Organizacija Trifecta Tech Foundation, koja razvija projekte kao što su ntpd-rs, sudo-rs, zlib-rs i bzip2-rs, izvijestila je o prelasku Firefoxa na korištenje biblioteke zlib-rs za kompresiju i dekompresiju koristeći gzip metodu. Osim zaštite od problema uzrokovanih greškama u radu s memorijom, prijelaz sa zlib na zlib-rs doveo je do značajnog povećanja performansi — u provedenim testovima ubrzanje je iznosilo od 3.3 do 32.5 puta za pojedinačne operacije dekodiranja i od 2.7 do 10.86 puta za dekodiranje kontinuiranog toka.
Biblioteka zlib-rs bila je uključena u izdanje Firefoxa 151, ali nakon njene integracije neki korisnici suočili su se s problemom koji je dovodio do rušenja zbog izlaska iz dopuštenih granica. Napominje se da je u kodu napisanom u Rustu problem uzrokovao rušenje, dok bi u C-u slična situacija dovela do neprimjetnog oštećenja podataka bez prekida rada. Kao rješenje, u izdanju 151.0.1 vraćena je stara biblioteka zlib.
Prvo manifestiranje problema uočeno je u procesu testiranja ranih verzija prije više od godinu dana, ali na sustavima programera nije se moglo reproducirati. Na kraju, nakon godinu dana testiranja na korisnicima beta izdanja, odlučeno je aktivirati zlib-rs u izdanju Firefoxa 151. Nakon nove serije izvještaja o problemima i analize obrazaca, utvrđeno je da je kvar uzrokovan greškom u mikrokodu Intel CPU-a temeljenog na mikroarhitekturi Raptor Lake 13. i 14. generacije, povezano s korištenjem pogrešnog registra.
Problem se javljao jer je LLVM generator koda koristio instrukciju "mov byte ptr [rsi + rdi + 1], ch" prilikom zapisivanja u memoriju rezultata Huffman kodiranja. Kada je ova instrukcija izvršena na CPU-u Raptor Lake, umjesto 8-15 bitova iz registra RCX, koji odgovaraju registru CH navedenom u instrukciji, u memoriju su se upisivali bitovi 0-7, koji pripadaju registru CL. Prilikom pripreme izdanja Firefoxa 152 greška je ispravljena zaobilaznim putem, a zakrpa je prenesena u glavnu verziju zlib-rs. Generacija problematične instrukcije uočena je u LLVM 22 (u razvoju četvrti LLVM 23 ona se ne generira).
Izvor: opennet.ru
