Google откри стотици състезателни условия в ядрото на Linux с помощта на KCSAN

Linux Kernel

Инженери на Google които допринасят за ядрото на Linux обявиха, че са открили стотици "Състезателни условия" в ядрото, използвайки KCSAN. Компанията отдавна работи върху AddressSanitizer, за да намери грешки, свързани с повреда на паметта или UndefinedBehaviorSanitizer за недефинирано поведение в кода.

Този път, Google предлага нов детектор „Условия на състезанието“ за ядрото на Linux, наречен KCSAN (Дезинфектант на паралелна ядро) Тези критични уязвимости не са нови. Всъщност Състезателни условия възникват, когато две или повече нишки в един и същ процес имат достъп до едно и също място в паметта едновременно, където поне един от достъпите е да пишете и когато нишките не използват никакви изключителни ключалки за контрол на достъпа си до тази памет.

Когато тези условия са изпълнени, редът за достъп не е детерминиран и изчислението може да даде различни резултати от едно изпълнение до друго в зависимост от този ред.

Състезателните условия все повече се възприемат като едновременни грешки при достъпа и са трудни за дублиране и диагностицирайте в паралелни програми. Ядрото на Linux е мащабна софтуерна система, в която интензивният паралелизъм на нишките и недетерминираното преплитане на нишки са по-обект на конкурентни условия.

Някои конкурентни ситуации могат да бъдат доброкачествени, но много от тях, идентифицирани досега, се считат за грешки.

Ядрото на Linux предоставя няколко механизма за избягване и управление на този тип условия Тъй като има инструменти като Thread Analyzer или KTSAN (Kernel Thread Sanitizer) за откриване на критични грешки при изпълнение в ядрото на Linux.

Google, който също допринася за ядрото на Linux, наскоро предложи KCSAN, нов детектор за условия на състезанието за ядрото, подобен на KTSAN.

Според Google, KCSAN се фокусира върху откриването на конкурентни ситуации в кода на ядрото. Този динамичен детектор за критично попадение е алтернатива на дезинфектанта на ядрото за нишки (KTSAN).

Според обяснението на Google, KCSAN се основава на контролни точки за вземане на проби, за разлика от детектора KTSAN, което е детектор за критичен удар преди събитието. Основните приоритети в дизайна на KCSAN са липсата на фалшиви положителни резултати, мащабируемост и простота.

KCSAN използва инструменти за компилиране за достъп до паметта. KCSAN е съвместим с компилаторите GCC и Clang. При GCC изисква версия 7.3.0 или по-нова, а при Clang версия 7.0.0 или по-нова.

На страницата на проекта GitHubМарко Елвър от Google пише, че използвайки KCSAN при тестове миналия месец, те са открили само за два дни повече от 300 уникални основни ситуации на конкуренция. KCSAN предоставя няколко опции за конфигуриране, за да персонализира поведението си.

„Използваме KCSAN чрез Syzkaller от няколко седмици и открихме много грешки. Първоначално през септември 2019 г. идентифицирахме над 300 уникални състезателни ситуации само за два дни “, написа той.

Google заяви, че цялостният подход се основава на DataCollider, друг динамичен детектор на конкурентни ситуации в модулите на ядрото. Но за разлика от DataCollider, KCSAN не използва точки за мониторинг на хардуера, вместо това разчита на инструменти за компилация.

Точките за наблюдение се изпълняват с помощта на ефективно кодиране, което съхранява вида, размера и адреса за достъп в дълъг файл. Предимствата от използването на гъвкави точки за наблюдение са преносимост и по-голяма гъвкавост при ограничаване на достъпа, който точката за наблюдение може да активира.

Ето някои от ключовите моменти, които KCSAN направи за Google:

  • Висока производителност: Времето за изпълнение на KCSAN е минимално и не изисква заключване на споделено състояние за всеки достъп. Резултатът е много по-добро представяне от KTSAN.
  • Няма допълнителна памет: според Google не се изисква кеш. Текущото изпълнение използва малък брой дължини за кодиране на информацията за точката за наблюдение, което е незначително
  • Команда за памет: KCSAN не познава правилата за управление на модела на паметта на ядрото на Linux (LKMM). Това може да доведе до загуба на критични състезания (фалшиви негативи) в сравнение с детектор за състезания преди събитие като KTSAN
  • точност: Според Google KCSAN е неточен, тъй като използва стратегия за вземане на проби;
  • Изисква анотация: изисква се минимална анотация извън времето на изпълнение на KCSAN. В случай на слушател на предварително условие, всеки пропуск води до фалшиви положителни резултати, което е особено важно в контекста на ядрото, което включва персонализирани механизми за синхронизиране.
  • Откриване на динамични записи от устройства: Чрез проверка на стойностите на данните по време на настройката на точката за наблюдение могат да бъдат открити и динамични записи от устройства.

Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

*

*

  1. Отговорник за данните: AB Internet Networks 2008 SL
  2. Предназначение на данните: Контрол на СПАМ, управление на коментари.
  3. Легитимация: Вашето съгласие
  4. Съобщаване на данните: Данните няма да бъдат съобщени на трети страни, освен по законово задължение.
  5. Съхранение на данни: База данни, хоствана от Occentus Networks (ЕС)
  6. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.