Google je otkrio stotine uvjeta utrke u Linux kernelu koristeći KCSAN

Linux kernela

Googleovi inženjeri koji doprinose jezgri Linuxa objavili su da su otkrili stotine "Race uvjeta" u jezgri koristeći KCSAN. Tvrtka već dugo radi na AddressSanitizeru kako bi pronašla pogreške povezane s oštećenjem memorije ili UndefinedBehaviorSanitizer za nedefinirano ponašanje u kodu.

Ovaj put, Google nudi novi detektor "Race Conditions" za Linux jezgru pod nazivom KCSAN (Sredstvo za dezinfekciju jezgre). Te kritične ranjivosti nisu nove. Zapravo Uvjeti utrke se javljaju kada dvije ili više niti u istom procesu istovremeno pristupaju istom memorijskom mjestu, gdje je barem jedan od pristupa pisanje, a kada niti ne koriste nikakve ekskluzivne brave za kontrolu pristupa ovoj memoriji.

Kada su ti uvjeti zadovoljeni, nalog za pristup nije deterministički i izračun može dati različite rezultate od jednog do drugog izvođenja, ovisno o ovom redoslijedu.

Uvjeti utrke sve se više vide kao istodobne pogreške u pristupu i teško ih je duplicirati i dijagnosticirati u paralelnim programima. Linux jezgra je softverski sustav velikih razmjera u kojem su paralelnost intenzivnih niti i nedeterminisano prepletanje niti više podložni uvjetima konkurencije.

Neke natjecateljske situacije mogu biti benigne, ali mnoge od njih do sada identificirane smatraju se pogreškama.

Linux jezgra nudi nekoliko mehanizama za izbjegavanje i upravljanje takvim vrstama stanja budući da postoje alati kao što su Thread Analyzer ili KTSAN (Kernel Thread Sanitizer) za otkrivanje kritičnih pogrešaka izvršavanja u Linux kernelu.

Međutim, Google, koji također doprinosi Linux jezgri, nedavno je predložio KCSAN, novi detektor rasnih uvjeta za jezgru, sličan KTSAN-u.

Prema Googleu, KCSAN se usredotočuje na otkrivanje konkurentskih situacija u kodu jezgre. Ovaj dinamički detektor kritičnih pogodaka alternativa je sredstvu za dezinfekciju navoja jezgre (KTSAN).

Prema Googleovom objašnjenju, KCSAN se temelji na mjernim mjestima uzorkovanja, za razliku od KTSAN detektora, što je kritični detektor utrke prije događaja. Ključni prioriteti u dizajnu KCSAN-a su nedostatak lažnih pozitivnih rezultata, skalabilnost i jednostavnost.

KCSAN koristi alate za kompilaciju za pristup memoriji. KCSAN je kompatibilan s GCC i Clang sastavljačima. Za GCC potrebna je verzija 7.3.0 ili novija, a za Clang verzija 7.0.0 ili novija.

Na GitHub stranici projektaGoogleov Marco Elver napisao je da su koristeći testove KCSAN prošlog mjeseca u samo dva dana otkrili više od 300 jedinstvenih osnovnih natjecanja. KCSAN nudi nekoliko mogućnosti konfiguracije za prilagodbu svog ponašanja.

“KCSAN koristimo putem Syzkallera već nekoliko tjedana i pronašli smo puno bugova. U početku u rujnu 2019. identificirali smo više od 300 jedinstvenih natjecateljskih situacija u samo dva dana ”, napisao je.

Google je rekao da se opći pristup temelji na DataCollideru, još jedan dinamički detektor konkurentskih situacija u modulima jezgre. No, za razliku od DataCollider, KCSAN ne koristi hardverske nadzorne točke, već se oslanja na alate za kompilaciju.

Nadzorne točke implementirane su učinkovitim kodiranjem koje pohranjuje vrstu, veličinu i pristupnu adresu u dugu datoteku. Prednosti korištenja fleksibilnih nadzornih točaka su prenosivost i veća fleksibilnost u ograničavanju pristupa koji nadzorna točka može aktivirati.

Evo nekoliko ključnih točaka koje je KCSAN iznio za Google:

  • Visoke performanse: KCSAN vrijeme izvođenja je minimalno i ne zahtijeva zajedničko zaključavanje stanja za svaki pristup. Rezultat su puno bolje performanse od KTSAN-a.
  • Nema dodatne memorije: prema Googleu nije potrebna predmemorija. Trenutna implementacija koristi mali broj duljina za kodiranje informacija o točkama nadzora, što je zanemarivo.
  • Naredba memorije: KCSAN ne poznaje pravila upravljanja jezgrom Linux memorije (LKMM). To može rezultirati gubitkom kritičnih utrka (lažni negativi) u usporedbi s detektorom utrke prije događaja kao što je KTSAN
  • točnost: Prema Googleu, KCSAN je neprecizan jer koristi strategiju uzorkovanja;
  • Zahtijeva napomenu: minimalna je napomena potrebna izvan vremena izvođenja KCSAN-a. U slučaju preslušavača događaja preduvjeta, bilo koji propust dovodi do lažnih pozitivnih rezultata, što je posebno važno u kontekstu jezgre koja uključuje prilagođene mehanizme za mjerenje vremena.
  • Otkrivanje dinamičkog upisivanja s uređaja: Provjerom vrijednosti podataka tijekom postavljanja točke nadzora također se mogu otkriti dinamička upisivanja s uređaja.

Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Odgovoran za podatke: AB Internet Networks 2008 SL
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.