Google ontdekte honderden Race Conditions in de Linux Kernel met KCSAN

Linux Kernel

Google-technici die bijdragen aan de Linux-kernel hebben aangekondigd dat ze honderden "Race conditions" hebben ontdekt, in de kernel met behulp van KCSAN. Het bedrijf werkt al lang aan AddressSanitizer om fouten te vinden die verband houden met geheugenbeschadiging of UndefinedBehaviorSanitizer voor ongedefinieerd gedrag in code.

Deze keer Google biedt een nieuwe "Race Conditions" -detector voor de Linux-kernel genaamd KCSAN (Kernel Concurrency Sanitizer). Deze kritieke kwetsbaarheden zijn niet nieuw. In feite de Wedstrijdcondities doen zich voor wanneer twee of meer threads in hetzelfde proces gelijktijdig toegang krijgen tot dezelfde geheugenlocatie, waar ten minste een van de toegangen is om te schrijven, en wanneer de threads geen exclusieve vergrendelingen gebruiken om hun toegang tot dit geheugen te regelen.

Wanneer aan deze voorwaarden is voldaan, is de toegangsvolgorde niet deterministisch en kan de berekening verschillende resultaten opleveren van de ene run naar de andere, afhankelijk van deze volgorde.

Racevoorwaarden worden steeds vaker gezien als gelijktijdige toegangsfouten en zijn moeilijk te dupliceren en diagnosticeren in parallelle programma's. De Linux-kernel is een grootschalig softwaresysteem, waarin thread-intensieve parallellisme en niet-deterministische thread-interleaving meer onderhevig zijn aan concurrentievoorwaarden.

Sommige competitieve situaties kunnen goedaardig zijn, maar veel ervan die tot nu toe zijn geïdentificeerd, worden als fouten beschouwd.

De Linux-kernel biedt verschillende mechanismen om dit soort omstandigheden te vermijden en te beheren Omdat er tools zijn zoals Thread Analyzer of KTSAN (Kernel Thread Sanitizer) om kritieke uitvoeringsfouten in de Linux Kernel te detecteren.

Google, dat ook bijdraagt ​​aan de Linux-kernel, heeft echter onlangs KCSAN voorgesteld, een nieuwe Race Conditions-detector voor de Kernel, vergelijkbaar met KTSAN.

Volgens Google richt KCSAN zich op het ontdekken van concurrentiesituaties in de kernelcode​ Deze dynamische detector voor kritieke treffers is een alternatief voor de Kernel Thread Sanitizer (KTSAN).

Volgens de uitleg van Google, KCSAN is gebaseerd op bemonsteringsbewakingspunten, in tegenstelling tot KTSAN-detector, wat een kritische racedetector is voor het evenement. De belangrijkste prioriteiten bij het ontwerp van KCSAN zijn het ontbreken van valse positieven, schaalbaarheid en eenvoud.

KCSAN gebruikt compilatietools om toegang te krijgen tot geheugen. KCSAN is compatibel met de GCC- en Clang-compilers. Met GCC is versie 7.3.0 of hoger vereist en met Clang is versie 7.0.0 of hoger vereist.

Op de GitHub-pagina van het projectGoogle's Marco Elver schreef dat ze KCSAN vorige maand in tests gebruikten en in slechts twee dagen tijd meer dan 300 unieke kerncompetitiesituaties ontdekten. KCSAN biedt verschillende configuratie-opties om zijn gedrag aan te passen.

“We gebruiken KCSAN via Syzkaller al enkele weken en we hebben veel bugs gevonden. In eerste instantie, in september 2019, identificeerden we meer dan 300 unieke competitiesituaties in slechts twee dagen ”, schreef hij.

Google zei dat de algemene aanpak is gebaseerd op DataCollider, een andere dynamische detector van competitieve situaties in de kernelmodules. Maar in tegenstelling tot DataCollider gebruikt KCSAN geen hardware-monitoringpunten, maar vertrouwt het op compilatietools.

De bewakingspunten worden geïmplementeerd met behulp van efficiënte codering die het type, de grootte en het toegangsadres in een lang bestand opslaat. De voordelen van het gebruik van flexibele bewakingspunten zijn draagbaarheid en grotere flexibiliteit bij het beperken van de toegang die een bewakingspunt kan activeren.

Hier zijn enkele van de belangrijkste punten die KCSAN voor Google heeft gemaakt:

  • Hoge performantie: De KCSAN-runtime is minimaal en vereist geen gedeelde statusvergrendeling voor elke toegang. Het resultaat is veel betere prestaties dan KTSAN.
  • Geen extra geheugen: volgens Google is geen cache vereist. De huidige implementatie gebruikt een klein aantal lengtes om de bewakingspuntinformatie te coderen, wat verwaarloosbaar is.
  • Geheugenopdracht: KCSAN kent de besturingsregels van het Linux kernelgeheugenmodel (LKMM) niet. Dit kan resulteren in het verlies van kritieke races (vals-negatieven) in vergelijking met een pre-event racedetector zoals KTSAN
  • nauwkeurigheid: Volgens Google is KCSAN onnauwkeurig omdat het een bemonsteringsstrategie gebruikt;
  • Vereist annotatie: minimale annotatie is vereist buiten de KCSAN-runtime. In het geval van een gebeurtenislistener voor precondities, leidt elke weglating tot valse positieven, wat vooral belangrijk is in de context van de kernel die aangepaste timingmechanismen bevat.
  • Detectie van dynamische schrijfbewerkingen vanaf apparaten: Door de gegevenswaarden te controleren tijdens het instellen van het controlepunt, kunnen dynamische schrijfbewerkingen van apparaten ook worden gedetecteerd.

Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: AB Internet Networks 2008 SL
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.