A Google több száz versenyfeltételt fedezett fel a Linux kernelben a KCSAN használatával

Linux Kernel

Google mérnökök amelyek hozzájárulnak a Linux kerneljéhez bejelentették, hogy több száz "Versenyfeltételt" fedeztek fel a rendszermagban a KCSAN segítségével. A vállalat már régóta dolgozik az AddressSanitizer-en, hogy megtalálja a memória sérülésével kapcsolatos hibákat, vagy az UndefinedBehaviorSanitizer-t a kódban definiálatlan viselkedés miatt.

Ezúttal, A Google egy új „Versenyfeltételek” érzékelőt kínál a Linux kernelhez, KCSAN néven (Kernel Concurrency Sanitizer). Ezek a kritikus sebezhetőségek nem új keletűek. Valójában a Versenyfeltételek akkor fordulnak elő, amikor ugyanazon folyamat két vagy több szála egyszerre éri el ugyanazt a memóriahelyet, ahol a hozzáférések legalább egyike írásra szolgál, és amikor a szálak nem használnak kizárólagos zárakat az ehhez a memóriához való hozzáférésük ellenőrzésére.

Ha ezek a feltételek teljesülnek, a hozzáférési sorrend nem meghatározó, és a számítás ettől a sorrendtől függően eltérő eredményeket adhat egyik futtatásról a másikra.

A versenyfeltételeket egyre inkább egyidejű hozzáférési hibának tekintik, és ezeket nehéz megismételni és párhuzamos programokban diagnosztizálni. A Linux kernel egy nagyméretű szoftverrendszer, amelyben a szálintenzív párhuzamosság és a nem determinisztikus szálak átszövése inkább versenyfeltételeknek van kitéve.

Néhány versenyhelyzet jóindulatú lehet, de az eddig azonosítottak közül sok hibának számít.

A Linux kernel számos mechanizmust biztosít az ilyen típusú feltételek elkerülésére és kezelésére Mivel vannak olyan eszközök, mint a Thread Analyzer vagy a KTSAN (Kernel Thread Sanitizer) a kritikus végrehajtási hibák felderítésére a Linux kernelben.

Azonban a Google, amely szintén hozzájárul a Linux kernelhez, nemrégiben javasolta a KCSAN-t, egy új Race feltételek detektor a kernelhez, hasonló a KTSAN-hoz.

A Google szerint a KCSAN a versenyhelyzetek felfedezésére összpontosít a kernel kódjában. Ez a dinamikus kritikus találatérzékelő a Kernel Thread Sanitizer (KTSAN) alternatívája.

A Google magyarázata szerint A KCSAN mintavételi megfigyelési pontokon alapszik, ellentétben a KTSAN detektorral, amely kritikus verseny detektor az esemény előtt. A KCSAN tervezésének legfontosabb prioritásai a hamis pozitív eredmények hiánya, a méretezhetőség és az egyszerűség.

A KCSAN fordítási eszközöket használ a memória eléréséhez. A KCSAN kompatibilis a GCC és a Clang fordítókkal. A GCC esetében a 7.3.0 vagy újabb verzióra van szükség, a Clang esetében pedig a 7.0.0 vagy újabb verzióra van szükség.

A projekt GitHub oldalánA Google Marco Elver azt írta, hogy a KCSAN használatával a múlt hónapban végzett tesztekben mindössze két nap alatt több mint 300 egyedi versenyszituációt találtak. A KCSAN számos konfigurációs lehetőséget kínál a viselkedésének testreszabásához.

„Több hete a Syzkalleren keresztül használjuk a KCSAN-t, és rengeteg hibát találtunk. Kezdetben 2019 szeptemberében több mint 300 egyedi versenyhelyzetet azonosítottunk két nap alatt ”- írta.

A Google szerint az átfogó megközelítés a DataCollider-en alapul, a versenyhelyzetek másik dinamikus detektora a kernelmodulokban. De a DataColliderrel ellentétben a KCSAN nem használ hardverfigyelő pontokat, hanem fordítási eszközökre támaszkodik.

A megfigyelési pontok hatékony kódolással valósulnak meg, amely egy hosszú fájlban tárolja a típust, méretet és hozzáférési címet. A rugalmas megfigyelőpontok használatának előnyei a hordozhatóság és a rugalmasság a hozzáférés korlátozásában, amelyet egy megfigyelőpont aktiválhat.

Íme néhány legfontosabb szempont, amelyet a KCSAN tett a Google számára:

  • Nagy teljesítményű: A KCSAN futási ideje minimális, és nem igényel megosztott állapot zárolást minden egyes hozzáféréshez. Az eredmény sokkal jobb teljesítmény, mint a KTSAN.
  • Nincs további memória: a Google szerint nincs szükség gyorsítótárra. A jelenlegi megvalósítás kis számú hosszúságot használ a megfigyelési pont információinak kódolásához, ami elhanyagolható.
  • Memória parancs: A KCSAN nem ismeri a Linux kernelmemória (LKMM) vezérlési szabályait. Ez kritikus versenyek elvesztését (hamis negatívumokat) eredményezheti az esemény előtti versenydetektorhoz képest, mint a KTSAN
  • pontosság: A Google szerint a KCSAN pontatlan, mert mintavételi stratégiát használ;
  • Megjegyzésre van szükség: minimális megjegyzésre van szükség a KCSAN futásidején kívül. Előfeltételes eseményhallgató esetén minden kihagyás hamis pozitív eredményhez vezet, ami különösen fontos az egyéni időzítési mechanizmusokat tartalmazó kernel összefüggésében.
  • Dinamikus írások észlelése az eszközökről: Az adatértékek ellenőrzésével a figyelőpont beállítása során az eszközökről érkező dinamikus írások is felismerhetők.

Hagyja megjegyzését

E-mail címed nem kerül nyilvánosságra. Kötelező mezők vannak jelölve *

*

*

  1. Az adatokért felelős: AB Internet Networks 2008 SL
  2. Az adatok célja: A SPAM ellenőrzése, a megjegyzések kezelése.
  3. Legitimáció: Az Ön beleegyezése
  4. Az adatok közlése: Az adatokat csak jogi kötelezettség alapján továbbítjuk harmadik felekkel.
  5. Adattárolás: Az Occentus Networks (EU) által üzemeltetett adatbázis
  6. Jogok: Bármikor korlátozhatja, helyreállíthatja és törölheti adatait.