Google va descobrir centenars de Race Conditions en el nucli de Linux usant KCSAN

Linux Kernel

Els enginyers de Google que contribueixen a el nucli de Linux han anunciat que han descobert centenars de «Race Conditions», en el nucli usant KCSAN. La companyia ha estat treballant durant molt temps en AddressSanitizer per trobar errors relacionats amb la corrupció de la memòria o en UndefinedBehaviorSanitizer per a un comportament indefinit en el codi.

Aquest cop, Google ofereix un nou detector "Race Conditions» per al nucli de Linux que es diu KCSAN (Kernel Concurrency Sanitizer). Aquestes vulnerabilitats crítiques no són noves. De fet les "Race Conditions» ocorren quan dos o més subprocessos en el mateix procés accedeixen simultàniament a la mateixa ubicació de memòria, On a l'almenys un dels accessos és per escriure, i quan els subprocessos no usen cap bloqueig exclusiu per controlar el seu accés a aquesta memòria.

Quan es compleixen aquestes condicions, l'ordre d'accés no és determinista i el càlcul pot donar resultats diferents d'una execució a una altra depenent d'aquest ordre.

Les Race Conditions es veuen cada vegada més com a errors d'accés simultani i són difícils de duplicar i diagnosticar en programes paral·lels. El nucli de Linux és un sistema de programari a gran escala, en què el paral·lelisme intensiu de subprocessos i l'intercalat de subprocessos no determinista estan més subjectes a condicions competitives.

Algunes situacions competitives poden ser benignes, però gran part d'elles identificades fins ara es consideren errors.

El nucli de Linux proporciona diversos mecanismes per evitar i gestionar aquest tipus de condicions ja que existeixen eines com Thread Analyzer o KTSAN (Kernel Thread Sanitizer) per detectar errors crítics d'execució en el nucli de Linux.

No obstant això, Google, que també contribueix a l'nucli de Linux, va proposar recentment KCSAN, Un nou detector de Race Conditions per al nucli, semblant a KTSAN.

Segons Google, KCSAN s'enfoca a descobrir situacions competitives en el codi de el nucli. Aquest detector dinàmic de cops crítics és una alternativa a el nucli Thread Sanitizer (KTSAN).

Segons l'explicació de Google, KCSAN es basa en punts de monitorització de mostreig, a diferència de l'detector KTSAN, que és un detector de carrera crític abans de l'esdeveniment. Les prioritats clau en el disseny de KCSAN són la manca de falsos positius, escalabilitat i simplicitat.

KCSAN utilitza eines de compilació per accedir a la memòria. KCSAN és compatible amb els compiladors GCC i Clang. Amb GCC, requereix la versió 7.3.0 o posterior i amb Clang, requereix la versió 7.0.0 o posterior.

A la pàgina GitHub de el projecte, Marc Elver de Google escriure que a l'usar KCSAN en proves el mes passat, van trobar en només dos dies més de 300 situacions de competència úniques al nucli. KCSAN proporciona diverses opcions de configuració per personalitzar el seu comportament.

«Hem estat utilitzant KCSAN a través d'Syzkaller durant diverses setmanes, i hem trobat molts errors. Inicialment al setembre de 2019, vam identificar més de 300 situacions de competència úniques durant només dos dies «, va escriure.

Google va dir que l'enfocament general es basa en DataCollider, un altre detector dinàmic de situacions competitives en els mòduls de l'nucli. Però a diferència d'DataCollider, KCSAN no utilitza punts de monitorització de maquinari, sinó que es basa en eines de compilació.

Els punts de monitorització s'implementen utilitzant una codificació eficient que emmagatzema el tipus, la mida i la direcció d'accés en un arxiu llarg. Els beneficis d'usar punts de monitorització flexibles són la portabilitat i una major flexibilitat per limitar l'accés que pot activar un punt de monitorització.

Aquests són alguns dels punts clau que KCSAN va fer per Google:

  • Alt rendiment: el temps d'execució de KCSAN és mínim i no requereix bloqueig d'estat compartit per a cada accés. El resultat és un rendiment molt millor que KTSAN.
  • Sense memòria addicional: segons Google, no es requereix cau. La implementació actual utilitza una petita quantitat de llargs per codificar la informació de el punt de monitorització, la qual cosa és insignificant
  • Comando de memòria: KCSAN no coneix les regles de control d'el model de memòria de el nucli de Linux (LKMM). Això pot resultar en carreres crítiques perdudes (falsos negatius) en comparació amb un detector de carrera abans de l'esdeveniment com KTSAN
  • precisió: segons Google, KCSAN és imprecís perquè utilitza una estratègia de mostreig;
  • Requereix anotació: es requereix una anotació mínima fora de el temps d'execució de KCSAN. En el cas d'un detector d'esdeveniments previ a la condició, qualsevol omissió condueix a falsos positius, la qual cosa és particularment important en el context de l'nucli que inclou mecanismes de sincronització personalitzats.
  • Detecció d'escriptures dinàmiques des de dispositius: a l'verificar els valors de dades durant la configuració del punt d'observació, també es poden detectar escriptures dinàmiques des de dispositius.

Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: AB Internet Networks 2008 SL
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.