Google löysi satoja kilpailuolosuhteita Linux-ytimestä KCSAN: n avulla

Linux-ydin

Google-insinöörit jotka vaikuttavat Linux-ytimeen ovat ilmoittaneet löytäneensä ytimestä satoja "Kilpailuolosuhteita" KCSAN: n avulla. Yritys on jo pitkään työskennellyt AddressSanitizerin kanssa muistivirheisiin liittyvien virheiden tai UndefinedBehaviorSanitizerin löytämiseksi koodin määrittelemättömään käyttäytymiseen.

Tällä kertaa, Google tarjoaa uuden Race Conditions -ilmaisimen Linux-ytimelle nimeltä KCSAN (Ytimen samanaikaispuhdistin). Nämä kriittiset haavoittuvuudet eivät ole uusia. Itse asiassa Kilpailuolosuhteet esiintyvät, kun kaksi tai useampia säikeitä samassa prosessissa käyttää samaa muistipaikkaa samanaikaisesti, jossa ainakin yhden pääsyistä on kirjoitettava, ja kun ketjut eivät käytä mitään yksinomaisia ​​lukkoja hallita pääsyään tähän muistiin.

Kun nämä ehdot täyttyvät, pääsyjärjestys ei ole deterministinen ja laskelma voi antaa erilaisia ​​tuloksia ajoista toiseen tästä järjestyksestä riippuen.

Kilpailuolosuhteita pidetään yhä useammin samanaikaisina käyttöoikeusvirheinä, ja niitä on vaikea kopioida ja diagnosoida rinnakkaisissa ohjelmissa. Linux-ydin on laajamittainen ohjelmistojärjestelmä, jossa kierreintensiivinen rinnakkaisuus ja ei-deterministinen ketjun lomitus ovat kilpailuolosuhteiden alaisia.

Jotkut kilpailutilanteet voivat olla hyvänlaatuisia, mutta monia toistaiseksi tunnistettuja virheitä pidetään virheinä.

Linux-ydin tarjoaa useita mekanismeja tämäntyyppisten olosuhteiden välttämiseksi ja hallitsemiseksi Koska kriittisten suoritusvirheiden havaitsemiseksi Linux-ytimessä on työkaluja, kuten Thread Analyzer tai KTSAN (Kernel Thread Sanitizer).

Google, joka myös osallistuu Linux-ytimeen, ehdotti kuitenkin äskettäin KCSAN: ää, uusi kilpailuilmaisin ytimelle, samanlainen kuin KTSAN.

Googlen mukaan KCSAN keskittyy kilpailutilanteiden löytämiseen ytinkoodista. Tämä dynaaminen kriittinen osumailmaisin on vaihtoehto Kernel Thread Sanitizerille (KTSAN).

Googlen selityksen mukaan KCSAN perustuu näytteenoton valvontapisteisiin, toisin kuin KTSAN-ilmaisin, joka on kriittinen kilpailutunnistin ennen tapahtumaa. Keskeisiä prioriteetteja KCSAN-suunnittelussa ovat väärien positiivisuuksien puute, skaalautuvuus ja yksinkertaisuus.

KCSAN käyttää käännöstyökaluja muistin saamiseen. KCSAN on yhteensopiva GCC- ja Clang-kääntäjien kanssa. GCC: n kanssa se vaatii version 7.3.0 tai uudemman ja Clangin kanssa version 7.0.0 tai uudemman.

Projektin GitHub-sivullaGooglen Marco Elver kirjoitti, että käyttäessään KCSANia testeissä viime kuussa he löysivät vain kahdessa päivässä yli 300 ainutlaatuista ydinkilpailutilannetta. KCSAN tarjoaa useita asetusvaihtoehtoja toimintojensa mukauttamiseksi.

"Olemme käyttäneet KCSANia Syzkallerin kautta useita viikkoja, ja olemme löytäneet paljon vikoja. Aluksi syyskuussa 2019 tunnistimme yli 300 ainutlaatuista kilpailutilannetta vain kahdessa päivässä ”, hän kirjoitti.

Google sanoi, että yleinen lähestymistapa perustuu DataCollideriin, toinen dynaaminen kilpailutilanteiden ilmaisin ytimen moduuleissa. Mutta toisin kuin DataCollider, KCSAN ei käytä laitteistojen valvontapisteitä, vaan se perustuu kääntötyökaluihin.

Valvontapisteet toteutetaan tehokkaalla koodauksella, joka tallentaa tyypin, koon ja käyttöosoitteen pitkään tiedostoon. Joustavien valvontapisteiden käytön edut ovat siirrettävyys ja suurempi joustavuus rajoitettaessa pääsyä, jonka seurantapiste voi aktivoida.

Tässä on joitain keskeisiä kohtia, jotka KCSAN toi esiin Googlelle:

  • Korkea suorituskyky: KCSAN-ajonaika on minimaalinen eikä vaadi jaettua tilalukitusta jokaiselle käytölle. Tulos on paljon parempi suorituskyky kuin KTSAN.
  • Ei lisämuistia: Googlen mukaan välimuistia ei tarvita. Nykyinen toteutus käyttää pientä määrää pituuksia seurantapisteiden tietojen koodaamiseen, mikä on merkityksetöntä.
  • Muistikomento: KCSAN ei tiedä Linux-ytimen muistimallin (LKMM) ohjaussääntöjä. Tämä voi johtaa kriittisten kilpailujen menetykseen (vääriä negatiivisia) verrattuna kilpailua edeltävään kilpailunilmaisimeen, kuten KTSAN
  • tarkkuus: Googlen mukaan KCSAN on epätarkka, koska se käyttää otantastrategiaa;
  • Vaatii merkinnän: vähäinen merkintä vaaditaan KCSAN-ajon ulkopuolella. Ennakkoehtoisten tapahtumien kuuntelijan tapauksessa mikä tahansa laiminlyönti johtaa väärään positiiviseen tulokseen, mikä on erityisen tärkeää mukautettujen ajoitusmekanismien sisältävän ytimen yhteydessä.
  • Dynaamisen kirjoituksen havaitseminen laitteista: Tarkistamalla data-arvot tarkkailupisteen asennuksen aikana voidaan myös havaita laitteiden dynaamiset kirjoitukset.

Jätä kommentti

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

*

*

  1. Vastaa tiedoista: AB Internet Networks 2008 SL
  2. Tietojen tarkoitus: Roskapostin hallinta, kommenttien hallinta.
  3. Laillistaminen: Suostumuksesi
  4. Tietojen välittäminen: Tietoja ei luovuteta kolmansille osapuolille muutoin kuin lain nojalla.
  5. Tietojen varastointi: Occentus Networks (EU) isännöi tietokantaa
  6. Oikeudet: Voit milloin tahansa rajoittaa, palauttaa ja poistaa tietojasi.