Po pol leta AMD-jevi procesorji še vedno s hroščem

Matej Huš

29. okt 2019 ob 17:54:03

Novejši AMD-jevi procesorji Ryzen 3000 imajo zanimivega hrošča, ki kljub navidezni benignosti povzroča velika probleme. Generator naključnih števil, ki ga vsebujejo, namreč ne vrača prav nič naključnih števil, temveč vedno 0xFFFFFFFF. Vgrajen generator naključnih števil v procesorjih je že od Intelovih Broadwellov in AMD-jevih Zenov nekaj običajnega, zato se številni programi zanašajo nanj. Procesorji imajo vgrajeno funkcijo RDRAND, ki iz termične entropije procesorja pridobi naključno število in ga vrne programu, ki zanj zaprosi. Ob tem imajo tudi kontrolni bit, ki sporoči, ali ima procesor sploh dovolj entropije za tvorjenje naključnih števil. AMD-jevi procesorji trdijo, da je imajo, a potem vedno vrnejo 0xFFFFFFFF. AMD je napako priznal že maja in pripravil popravek, ki pa ga morajo v BIOS spraviti proizvajalci matičnih plošč - in številni tega sploh še niso storili, pa uporabniki ne morejo storiti ničesar.

Posledice so najrazličnejše. Zloglasni program v Linuxu systemd, ki potrebuje naključna števila in je nujen za zagon sistema, se je sprva obesil. Šele ko so pripravili grd obvoz, ki ob številu 0xFFFFFFFF uporabi druge metode tvorjenja naključnih števil, so se ti računalniki sploh zbudili. A to ni edina težava, ki obstaja. WireGuard na primer pri vzpostavitvi nove povezave zanjo poišče unikatno identifikacijsko številko, ki ji dobi iz RDRAND. Ob tem preveri, ali ni slučajno enaka kot prejšnja, in v tem primeru zaprosi za novo. V primeru AMD-jevih procesorjev se tako zatakne v neskončni zanki, kar sistem spravi na kolena. Klic RDRAND je namreč globoko v jedro.

Problem tovrstnih težav je dvojen. Po eni strani gre za lepo ilustracijo, kako moderna prepletenost programske opreme povzroči težave tam, kjer jih sploh ne bi pričakovali. Nedelujoč generator naključnih števil ima posledice za zagon sistema in lahko zablokira cel računalnik. Po drugi strani kaže, kako nemočni so uporabniki, saj so prepuščeni na nemilost na proizvajalcev matičnih plošč, da popravek vključijo v novo verzijo BIOS. In na koncu - čim več programov bo občutljivih in čim dlje bomo na popravek čakali, tem več piscev programske opreme bo našlo obvoze. Naključna števila je namreč možno dobiti tudi drugače. In tako se prav lahko zgodi, da luknja ne bo zakrpana še mesece ali leta, pa tega ne bo nihče zares vedel (če ne bo izrecno preveril z namenskim orodjem).