Google atklāja simtiem sacensību apstākļu Linux kodolā, izmantojot KCSAN

Linux Kernel

Google inženieri kas veicina Linux kodola izveidi ir paziņojuši, ka kodolā, izmantojot KCSAN, ir atklājuši simtiem "Sacensību apstākļu". Uzņēmums jau ilgu laiku strādā pie AddressSanitizer, lai atrastu kļūdas, kas saistītas ar atmiņas bojājumu, vai UndefinedBehaviorSanitizer par nedefinētu uzvedību kodā.

Šoreiz, Google piedāvā jaunu “Sacīkšu apstākļu” detektoru Linux kodolam ar nosaukumu KCSAN (Kodola vienlaicīgas tīrīšanas līdzeklis). Šīs kritiskās ievainojamības nav jaunas. Patiesībā Sacensību apstākļi rodas, ja divi vai vairāki pavedieni vienā un tajā pašā procesā vienlaikus piekļūst tai pašai atmiņas vietai, kur vismaz viena no piekļuvēm paredzēta rakstīšanai un ja pavedieni neizmanto nekādas ekskluzīvas slēdzenes, lai kontrolētu piekļuvi šai atmiņai.

Kad šie nosacījumi ir izpildīti, piekļuves secība nav deterministiska, un aprēķins var dot atšķirīgus rezultātus no viena brauciena uz otru atkarībā no šīs kārtības.

Sacensību apstākļi arvien vairāk tiek uzskatīti par vienlaicīgām piekļuves kļūdām, un tos ir grūti atkārtot un diagnosticēt paralēlās programmās. Linux kodols ir liela mēroga programmatūras sistēma, kurā pavedienu intensīvais paralēlisms un nedeterministiskais pavedienu savijums ir vairāk pakļauti konkurences apstākļiem.

Dažas konkurences situācijas var būt labvēlīgas, taču daudzas no tām, kas līdz šim identificētas, tiek uzskatītas par kļūdām.

Linux kodols nodrošina vairākus mehānismus, lai izvairītos no šāda veida apstākļiem un tos pārvaldītu Tā kā kritisko izpildes kļūdu noteikšanai Linux kodolā ir tādi rīki kā Thread Analyzer vai KTSAN (Kernel Thread Sanitizer).

Tomēr Google, kas arī sniedz ieguldījumu Linux kodolā, nesen ierosināja KCSAN, jauns kodolam paredzēts sacensību apstākļu detektors, līdzīgs KTSAN.

Pēc Google domām, KCSAN koncentrējas uz konkurences situāciju atklāšanu kodola kodā. Šis dinamiskais kritisko triecienu detektors ir alternatīva kodola pavedienu sanitizatoram (KTSAN).

Saskaņā ar Google skaidrojumu KCSAN pamatā ir paraugu ņemšanas uzraudzības punkti, atšķirībā no KTSAN detektora, kas ir kritisks sacensību detektors pirms pasākuma. KCSAN dizaina galvenās prioritātes ir viltus pozitīvu rezultātu trūkums, mērogojamība un vienkāršība.

KCSAN izmanto kompilēšanas rīkus, lai piekļūtu atmiņai. KCSAN ir savietojams ar GCC un Clang kompilatoriem. Izmantojot GCC, tam ir nepieciešama 7.3.0 vai jaunāka versija, savukārt Clang - 7.0.0 vai jaunāka versija.

Projekta GitHub lapāGoogle Marco Elver rakstīja, ka, izmantojot pagājušajā mēnesī testos izmantoto KCSAN, viņi tikai divu dienu laikā atrada vairāk nekā 300 unikālas konkurences situācijas. KCSAN nodrošina vairākas konfigurācijas opcijas, lai pielāgotu savu uzvedību.

“Mēs vairākas nedēļas izmantojām KCSAN, izmantojot Syzkaller, un esam atraduši daudz kļūdu. Sākotnēji 2019. gada septembrī tikai divu dienu laikā mēs identificējām vairāk nekā 300 unikālas sacensību situācijas, ”viņš rakstīja.

Google teica, ka vispārējā pieeja ir balstīta uz DataCollider, vēl viens dinamisks konkurences situāciju detektors kodola moduļos. Bet atšķirībā no DataCollider, KCSAN neizmanto aparatūras uzraudzības punktus, tā vietā paļaujas uz kompilēšanas rīkiem.

Uzraudzības punkti tiek ieviesti, izmantojot efektīvu kodējumu, kas saglabā veidu, lielumu un piekļuves adresi garā failā. Elastīgu uzraudzības punktu izmantošanas priekšrocības ir pārnesamība un lielāka elastība, ierobežojot piekļuvi, ko var aktivizēt uzraudzības punkts.

Šeit ir daži no galvenajiem punktiem, ko KCSAN izvirzīja Google:

  • Augsta veiktspēja: KCSAN izpildlaiks ir minimāls, un katrai piekļuvei nav nepieciešama koplietota stāvokļa bloķēšana. Rezultāts ir daudz labāks sniegums nekā KTSAN.
  • Nav papildu atmiņas: pēc Google domām, kešatmiņa nav nepieciešama. Pašreizējā ieviešanā monitoringa punkta informācijas kodēšanai tiek izmantots neliels garumu skaits, kas ir nenozīmīgi.
  • Atmiņas komanda: KCSAN nezina Linux kodola atmiņas modeļa (LKMM) vadības noteikumus. Tā rezultātā var tikt zaudētas kritiskās sacensības (nepatiesi negatīvi), salīdzinot ar pirms sacensību detektoru, piemēram, KTSAN
  • Precizitāte: Pēc Google domām, KCSAN ir neprecīzs, jo tajā tiek izmantota izlases stratēģija;
  • Nepieciešama anotācija: ārpus KCSAN izpildlaika ir nepieciešama minimāla anotācija. Priekšnosacījumu notikumu klausītāja gadījumā jebkura noklusēšana noved pie nepatiesiem pozitīviem rezultātiem, kas ir īpaši svarīgi kodola kontekstā, kurā ietilpst pielāgoti laika mehānismi.
  • Dinamisko ierakstu noteikšana no ierīcēm: Pārbaudot datu vērtības kontrolpunkta iestatīšanas laikā, var noteikt arī dinamiskas rakstīšanas no ierīcēm.

Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgais par datiem: AB Internet Networks 2008 SL
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.