Un hack urât în nucleul Linux care a fost în linia principală de peste trei ani a fost denunțat. Din cauza unei erori X.Org Server/xf86-video-modetting DDX, kernel-ul Linux a impus un comportament diferit dacă un proces începe cu „X” și, la rândul său, dezactivează suportul pentru setarea modului atomic.
Cercetatorul de securitate Linux Jason Donenfeld (care este, de asemenea, binecunoscut pentru că a venit cu WireGuard), a dat peste acest hack de cod urât din kernel.
Donenfeld a comentat în acest weekend la lista de corespondență a kernelului:
Acest lucru revine 26b1d3b527e7 (“drm/atomic: Luați jucăriile atomice departe de X”), un kludge asemănător rootkit-ului care nu are nicio treabă în interiorul unui nucleu de uz general. Este tipul de hack de depanare pe care îl voi folosi momentan, dar niciodată nu îl commit, sau un fel de truc malware-babbies-first-process-hider.
Povestea de fundal este că un cod de spațiu utilizator–xorg-server–are un DDX cu setare de mod care nu este codificat corect. Fiindcă nimeni nu mai dorește să mențină X11, mai degrabă decât să repare codul de erori, nucleul a fost ajustat pentru a evita să fie nevoie să atingeți X11. O dezamăgire, dar destul de corect: dacă nucleul nu mai dorește să accepte unele API-uri pentru spațiul de utilizare, ceea ce trebuie să faci este să aranjezi o rezervă grațioasă în care spațiul utilizatorului consideră că nu este disponibil într-un mod ușor de gestionat.
Cu toate acestea, *modul* în care procedează pentru a face acest lucru este doar să verifici `current->comm[0]==’X’` și să-l dezactivezi doar pentru acel caz. Deci, asta înseamnă că *nu* este pur și simplu o chestiune ca nucleul să nu mai dorească să accepte un anumit API userspace, ci mai degrabă că nucleul nu dorește să accepte xorg-server, în teorie, dar de fapt, se dovedește, acestea sunt toate procesele care începe cu „X”.
A juca astfel de jocuri cu curent->comm este evident greșit și este destul de șocant că acest lucru a fost comis vreodată.
commit la acest nucleu cu verificarea primului caracter „X” a fost făcută încă din septembrie 2019. Argumentul în acea comitere a nucleului Linux la acea vreme a fost:
Modetting ddx are o idee complet ruptă despre modul în care funcționează atomic:
-nu dezactivează conectorii vechi, presupunând că aceștia se dezactivează automat ca și setcrtc moștenit
-presupune că ASYNC_FLIP este conectat prin cablu pentru
ioctl atomic-nici un apel la TEST_ONLY[Cu alte cuvinte] implementarea este o traducere 1:1 a ioctls moșteniți în atomic, care este a) rupt b) fără rost.
Avem deja erori atât în i915, cât și în amdgpu-DC, unde acest lucru ne împiedică să activăm funcții bune.
Dacă cuiva îi pasă vreodată de atomul din X, putem adăuga cu ușurință un nou nivel atomic (req->valoare==2) pentru ca X să recupereze jucăriile strălucitoare.
Din moment ce aceste versiuni defectuoase ale-modetting au fost expediate, nu există într-adevăr altă modalitate de a scăpa de această legătură.
Veștile „bune” sunt că de atunci pe partea spațiului utilizatorului în 2019, codul xf86-video-modetting a continuat și a dezactivat suportul atomic în mod implicit. Deci, din punct de vedere tehnic, dacă rulați o stivă X.Org actualizată în ultimii trei ani, acest hack de kernel nu mai este necesar, deoarece spațiul utilizatorului evită tocmai atunci API-ul atomic.
Vom vedea dacă Linus Torvalds este de acord ca acest hack să fie eliminat, deoarece, până la urmă, contravine principiului său de „a nu sparge spațiul utilizatorului”, regresând apoi sistemul dacă rămâne la o stivă de server X.Org învechită și dorind să ruleze cu o versiune viitoare de kernel. Vom vedea, dar surprinzător a fost nevoie de trei ani pentru ca acest cod murdar să fie criticat.