Kde by se tak velké mikrokódy vzaly? Když se podívám do /lib/firmware/intel-ucode vidím největší soubor 200704 B, nejmenší 2048 B. To je od MB vzdáleno hodně.
Pro úplnost u AMD v /lib/firmware/amd-ucode je nejmenší soubor s mikrokódem 3510 B a největší 12684 B.
Otázka je, čo to je, lebo je to väčšie ako 12kiB= 12288B, Koľko z toho súboru je hlavička, ktorá nejde do CPU.
Ono na tých 12kiB sa mohlo prísť práve pri tom súbore...
a preto je to neodkladné=urgentné
>With a change now pending as part of the x86/urgent work,
https://www.phoronix.com/scan.php?page=news_item&px=AMD-Larger-Microcode-Linux
Ty soubory jsou tzv. "bundles", v nich je několik "containers", v nich jsou "patches", ty se nahrávají jeden po druhém a do teď byly vždy pod 4K.
Jsou tam patche pro různá CPU, nejen to Vaše.
Víc o tom nevím, oficiálně je to jen blob a nikdo mimo AMD neví, jak se to interpretuje. Jistě to už ale někdo analyzoval a pochopil :)
Pry nikdo... ale Ti chytrejsi v mikrokodu dokazou napsat i vira ,)
https://hackaday.com/2017/12/28/34c3-hacking-into-a-cpus-microcode/
https://argp.github.io/2017/09/14/re-x86-microcode/
google: amd microcode K10 pdf
17. 4. 2020, 10:08 editováno autorem komentáře
Zaujimave by bolo zmenou mikrokodu si upravit procesor tak, ze ani sofistikovane viry by nemali sancu. Samozrejme by bolo nutne upravit kompilator, aby generoval kod pre upraveny procesor a nasledne prekompilovat OS a aplikacie.
Malware dneska vemi málokdy dělá něco tak nízko, má mezi sebou a CPU několik virtuálních mašin. Je jedno jestli pod tím máte amd64, riscv nebo nějaký arm, ten javascript a zero-day exploit prohlížeče na tom funguje úplně stejně.
To zavisi od typu malware, prave tie extra sofistikovane a tazko odhalitelne funguju na dost nizkej urovni (Stuxnet). Je jasne, ze javascript virus v prehliadaci by takato technika nazablokovala.
Asi je tam nastavena maximalna velkost uloziska pre FW CPU (pred loadom do CPU) vo velkosti jednej stranky, teda 4k. Predpokladam, ze ide o to ze sa dana cast pamati "pinuje" (zakazuje sa jej odswapovanie, co je pri takej citlivej zalezitosti ako load FW do CPU pochopitelne) a tam je prax vyuzivat to najmensie mnozstvo pamati. Teraz sa velkost alokovanej pamati zvysila na 3 stranky (12kB).
Nějak velký buffer mít musíte, a tohle zatím stačilo. Šlo by samozřejmě alokovat paměť dynamicky, např. podle velikosti souboru, ale to je všechno komplexita navíc, a to ve velmi rané a zranitelné fázi bootu. Nevím jistě, ale myslím že je to ještě před inicializací MMU, není k dispozici heap (a tím pádem malloc), dost možná ani stat.
Do SoCu se to nahraje tak, že microcode nahrajete do paměti, a pak do určitých registrů zapíšete pointer a délku, kolik si má přečíst (arch/x86/kernel/cpu/microcode/amd.c).
Otazka je proc je to vubec soucasti jadra a ne uz bootloaderu. Jedinej duved co me napada je EFI stub a ten by tam taky vubec nemusel byt...
A proc by bootloader mel nest tech 7.5MB (239 souboru) zbytecne zateze? Jaka by byla vyhoda??
Protoze mikrokod obsahuji rovnou i BIOSy, z vyse uvedene mnoziny vzdy jen ty, ktere se tykaji CPU ktery lze do desky pripojit.
CPU mikrokod jsou patche pro zpusob vykonavani instrukci, neni to neco, bez ceho by se nedalo fungovat.
Vzdy to fungunguje alespon natolik, ze se kernel natahne. A kdyz se neudelaj specificke kroky k pribaleni konkretniho uCode patche ke kernelu, tak i namountovani filesystemu probehne relativne dobre.
Pokud by neco nefungovalo do teto miry, patri uCode update do BIOSu, kde jsou na to pripraveni.
BIOS updaty mohou být ne vždy dostupné.
A mikrokód může znamenat i nové/redefinované instrukce (IBRS, vmwerv, ...) které starší kernely byly schopné identifikovat pouze při startu.
Bootloadery jsou různé, některé to umí, jiné ne. GRUB třeba ano, stačí mu dát initramfs se správným názvem a nahraje to taky.
To ešte asi nebudem mať
sudo zypper dup
;Načítavam údaje repozitárov...
Načítavam nainštalované balíky...
Pozor: Chystáte sa urobiť povýšenie distribúcie so všetkými zapnutými repozitármi. Než budete pokračovať, uistite sa, že sú tieto repozitáre kompatibilné. Pre viac informácií pozrite 'man zypper'.
Vypočítavam povýšenie distribúcie...
Verzia nasledujúcich 31 balíkov bude zvýšená:
kernel-firmware-all kernel-firmware-amdgpu kernel-firmware-atheros kernel-firmware-ath10k kernel-firmware-bluetooth kernel-firmware-bnx2 kernel-firmware-brcm kernel-firmware-dpaa2 kernel-firmware-chelsio kernel-firmware-intel kernel-firmware-iwlwifi
kernel-firmware-i915 kernel-firmware-liquidio kernel-firmware-marvell kernel-firmware-media kernel-firmware-mediatek kernel-firmware-mellanox kernel-firmware-mwifiex kernel-firmware-network kernel-firmware-nfp kernel-firmware-nvidia kernel-firmware-platform
kernel-firmware-qlogic kernel-firmware-radeon kernel-firmware-realtek kernel-firmware-serial kernel-firmware-sound kernel-firmware-ti kernel-firmware-ueagle kernel-firmware-usb-network ucode-amd
31 balíkov pre zvýšenie verzie.
Celková sťahovaná veľkosť: 151,5 MiB. Vo vyrovnávacej pamäti je už: 0 B. Po tejto operácii bude použitých ďalších 1,1 MiB.
Pokračovať? [a/n/v/...? ukazuje všetky voľby] (a): v
: Neplatná odpoveď ';v'.
[a/n/v/...? ukazuje všetky voľby] (a): v
Verzia nasledujúcich 31 balíkov bude zvýšená:
kernel-firmware-all 20200316-35.1 -> 20200413-35.1
kernel-firmware-amdgpu 20200316-35.1 -> 20200413-35.1
kernel-firmware-atheros 20200316-35.1 -> 20200413-35.1
kernel-firmware-ath10k 20200316-35.1 -> 20200413-35.1
kernel-firmware-bluetooth 20200316-35.1 -> 20200413-35.1
kernel-firmware-bnx2 20200316-35.1 -> 20200413-35.1
kernel-firmware-brcm 20200316-35.1 -> 20200413-35.1
kernel-firmware-dpaa2 20200316-35.1 -> 20200413-35.1
kernel-firmware-chelsio 20200316-35.1 -> 20200413-35.1
kernel-firmware-intel 20200316-35.1 -> 20200413-35.1
kernel-firmware-iwlwifi 20200316-35.1 -> 20200413-35.1
kernel-firmware-i915 20200316-35.1 -> 20200413-35.1
kernel-firmware-liquidio 20200316-35.1 -> 20200413-35.1
kernel-firmware-marvell 20200316-35.1 -> 20200413-35.1
kernel-firmware-media 20200316-35.1 -> 20200413-35.1
kernel-firmware-mediatek 20200316-35.1 -> 20200413-35.1
kernel-firmware-mellanox 20200316-35.1 -> 20200413-35.1
kernel-firmware-mwifiex 20200316-35.1 -> 20200413-35.1
kernel-firmware-network 20200316-35.1 -> 20200413-35.1
kernel-firmware-nfp 20200316-35.1 -> 20200413-35.1
kernel-firmware-nvidia 20200316-35.1 -> 20200413-35.1
kernel-firmware-platform 20200316-35.1 -> 20200413-35.1
kernel-firmware-qlogic 20200316-35.1 -> 20200413-35.1
kernel-firmware-radeon 20200316-35.1 -> 20200413-35.1
kernel-firmware-realtek 20200316-35.1 -> 20200413-35.1
kernel-firmware-serial 20200316-35.1 -> 20200413-35.1
kernel-firmware-sound 20200316-35.1 -> 20200413-35.1
kernel-firmware-ti 20200316-35.1 -> 20200413-35.1
kernel-firmware-ueagle 20200316-35.1 -> 20200413-35.1
kernel-firmware-usb-network 20200316-35.1 -> 20200413-35.1
ucode-amd 20200316-35.1 -> 20200413-35.1
Ale updateujú sa mi obe veci
kernel-firmware-amdgp
aj
ucode-amd
pre
Creating initramfs image file '/boot/initrd-5.6.4-1.ge42da4f-defaul
17. 4. 2020, 09:59 editováno autorem komentáře