Přeskočit na obsah
Tech-Blog Chatujme.cz Chatujme.cz
Technologie

Jádro Linuxu si v chystané verzi 7.4 poznačí ruční připojení ovladače k zařízení

Správci jádra ovladačů poslali Linusi Torvaldsovi k zařazení do verze Linuxu 7.4 nový příznak TAINT_FORCED_BIND. Jádro si ho nastaví pokaždé, když někdo zapíše do souborů bind nebo unbind v sysfs a připojí tím ovladač k zařízení ručně. Greg Kroah-Hartman v popisu změny píše, že rozhraní zneužily fuzzovací nástroje, které vázaly libovolný ovladač na libovolné zařízení, a vývojáři pak probírali hlášení chyb bez obsahu.

· 20 zhlédnutí

Danilo Krummrich poslal 17. října Linusi Torvaldsovi žádost o začlenění změn jádra ovladačů do chystané verze Linuxu 7.4. První položka v jejím soupisu zavádí příznak TAINT_FORCED_BIND. Jádro a modul ovladače se jím označí vždy, když někdo přes sysfs ručně připojí ovladač k zařízení nebo ho od něj odpojí.

Jádro si vede sadu příznaků, kterými přiznává, že se v něm stalo něco, co pozdější hledání chyby komplikuje: nahraný modul bez podpisu, modul ze staging, záplata nasazená za běhu. Anglicky se tomu říká taint a ve výpisu havárie je vidět jako písmeno hned za adresou, na které jádro spadlo. Vydaný Linux 7.3 jich zná dvacet, číslovaných od nuly do devatenácti; nový příznak by byl jedenadvacátý.

Výpis havárie jádra Linuxu na obrazovce CRT monitoru
Havárie jádra Linuxu 2.6.9 na CRT monitoru; v šestém řádku výpisu registrů stojí u adresy EIP poznámka „Not tainted“. Foto: Dolda2000, Wikimedia Commons (volné dílo)

Rozhraní, které mělo pomáhat vývojářům

Soubory bind a unbind leží v sysfs u každého ovladače. Kdo do nich zapíše označení zařízení na sběrnici, přiřadí ho tomu ovladači bez překladu nového jádra. Vzniklo to podle popisu změny před desítkami let proto, aby vývojáři mohli zkoušet rychleji a aby si uživatel mohl nové zařízení k ovladači přidat sám.

„Tohle rozhraní se léta zneužívá a nedávno se dostalo pod velký fuzzovací ‚útok‘ přes nástroje typu syzbot, které se rozhodly zkoušet navázat libovolný ovladač na libovolný typ zařízení, což vyrobilo spoustu zbytečných chyb a nesmyslných záplat od nic netušících nových vývojářů,“ napsal k tomu Greg Kroah-Hartman (přeloženo). Syzbot je automat, který na jádro pouští fuzzer syzkaller a nalezené pády sám hlásí do konference.

Příznak se nastaví dřív, než se ovladač vůbec ozve

Pořadí je v popisu změny vysvětlené: pád, varování nebo oops často nastanou přímo uvnitř obsluhy připojení. Kdyby se příznak nastavoval až po ní, ve výpisu havárie by chyběl a nebylo by z něj poznat, o co se někdo pokoušel.

Písmeno Y bylo z abecedy volné. Kroah-Hartman ho v popisu zdůvodnil slovesem „yeet“, tedy mrštit něčím bez ohledu na to, co se s tím stane. V tabulce příznaků v dokumentaci jádra má nový řádek číslo 20, hodnotu 1 048 576 a popis „device was manually bound or unbound from a driver“.

Fuzzovací nástroje mají spadnout rovnou

Nástrojům, které nemají ruční pravidla, aby se souborům bind a unbind vyhnuly, popis změny doporučuje zapnout panic_on_taint. Jádro pak při nastavení příznaku zpanikaří a nástroj nepokračuje v domnění, že narazil na skutečnou chybu.

Obě legitimní použití zůstávají. Kdo si přes bind vnutí zařízení, na které ovladač není napsaný, dostane je dál do chodu, jen bude jádro označené. A ruční odpojování podle popisu změny opravdu odhaluje chyby typu use-after-free, tedy práci s pamětí, která už byla uvolněná. Ty se mají řešit dál; příznak má jen pomoci roztřídit, která hlášení stojí za pohled.

V hlavní větvi to zatím není

Commit fcbfaffee51a leží ve stromu driver-core od 18. září, prošel recenzí Johana Hovolda, Aarona Tomlina a Bradleyho Morgana a mění šest souborů: 46 přidaných řádků proti 28 ubraným. Uwe Kleine-König k němu 28. září doplnil opravu ukázkového skriptu v dokumentaci, který vypisuje nastavené bity z /proc/sys/kernel/tainted a o jedenadvacátém nevěděl.

Linux 7.3 vyšel 18. října a slučovací okno pro 7.4 se otevřelo hned po něm. K ránu 20. října Torvalds žádost ještě nezačlenil: v souboru include/linux/panic.h v hlavní větvi končí výčet příznaků pořád na TAINT_FWCTL s číslem 19.

Druhá reakce na strojový hluk v témže okně

Borislav Petkov poslal 19. října žádost o začlenění změn podsystému EDAC, který v jádře hlídá chyby paměti. Osiřely v ní ovladače i82975x, x38, xgene a i3200. Dostávaly podle Petkova jen občasné aktualizace mimochodem, nikdo je doopravdy nepoužívá a v konferencích po nich nejsou stopy; s nástupem „horečky strojově generovaných oprav“ a proto, že je nemá kdo vyzkoušet, je podle něj čas je odstavit (přeloženo). Ve stejném soupisu stojí o kus níž položka, kterou sám označuje za „teď už obvyklé opravy poháněné umělou inteligencí“.

Záplaty psané s jazykovým modelem přitom do jádra chodí i bez poplachu. Dvacet tři patchů, které zrychlují sestavení jádra, poslal v září vývojář ARM Lorenzo Stoakes a každý z nich nese značku Assisted-by.

Phoronix popsal důvod u nového příznaku jako fuzzovací útok agentů s umělou inteligencí. Popis změny v jádře umělou inteligenci nejmenuje ani jednou: mluví o fuzzovacích nástrojích typu syzbot a o záplatách, které podle něj píšou nic netušící noví vývojáři.

Zdroje

Technologie

Linux Jádro Linuxu Ovladače umělá inteligence syzbot

← zpět na výpis