Баги в ядрі Linux є непомітними протягом років

Дослідження 20-річної історії ядра Linux показало: у середньому помилки в коді живуть понад два роки, перш ніж їх знаходять і виправляють. Про це йдеться у звіті Pebblebed, автор якого проаналізував понад 125 тисяч виправлень у Git-репозиторії Linux.

Основою для аналізу стали коміти з тегом Fixes: — це стандартна позначка в ядрі Linux, яка вказує на коміт, де помилка була вперше допущена. Такий підхід дозволив точно визначити, скільки часу помилка залишалася в коді до моменту виправлення.

Скільки часу живе помилка в ядрі?

Аналіз повної історії ядра Linux з 2005 по 2025 рік показав:

  • 125 183 зафіксовані пари «помилка-виправлення», з яких 123 696 мали коректні часові дані;
  • середній час до виявлення помилки — 2,1 року, медіанне значення — 0,7 року;
  • 57% помилок знаходять протягом першого року;
  • 13,5% проблем залишаються непоміченими понад 5 років;
  • 4,2% помилок існують більше ніж 10 років.

Найдовше зафіксована помилка — переповнення буфера в утиліті ethtool — перебувала в коді аж 20,7 року!

Окремий аналіз лише тих помилок, які були виправлені у 2025 році, дав іншу картину:

  • середній час життя помилки зріс до 2,8 року;
  • відсоток проблем, що залишалися непоміченими понад 5 років, сягнув 19,4%.

Дослідник пояснює це ефектом вибірки: у 2025 році виправляли як нові баги, так і велику кількість «історичних» проблем, накопичених за попередні роки.

Не всі підсистеми однаково проблемні

Час, необхідний для виявлення помилки, значно відрізняється залежно від підсистеми ядра. Найгірші показники мають компоненти з меншою кількістю тестів і вузькою сферою використання:

  1. драйвери CAN-шини — у середньому 4,2 року;
  2. мережевий стек SCTP — 4 роки;
  3. IPv4-стек — 3,6 року;
  4. USB та TTY — приблизно 3,5 року;
  5. Netfilter і загальний мережевий стек — 2,9 року.

Для порівняння, помилки в підсистемах GPU та BPF знаходять значно швидше — у межах 1-1,4 року. Дослідження пов’язує це з активним використанням фазингу та спеціалізованої інфраструктури для тестування.

Які типи багів ховаються найдовше?

Не всі помилки однаково помітні. Найбільше часу на виявлення потребують:

  • race condition — у середньому 5,1 року;
  • integer overflow — 3,9 року;
  • use-after-free — 3,2 року;
  • memory leak — 3,1 року;
  • buffer overflow — 3,1 року.

Причина у складності відтворення. Багато з цих проблем проявляються лише за специфічних умов: певної послідовності подій, навантаження, тиску на пам’ять або паралельного виконання коду.

Інструменти впливають на ситуацію

За останні роки швидкість виявлення помилок у ядрі Linux суттєво зросла. Якщо у 2010 році жодну нову помилку не виявляли протягом першого року, то у 2022 році цей показник сягнув 69%.

Ключову роль у цьому зіграли:

  1. фазер Syzkaller, який активно використовується з 2015 року;
  2. санітайзери KASAN, KMSAN та KCSAN;
  3. розвиток статичного аналізу;
  4. збільшення кількості рев’ю коду та контриб’юторів.

Водночас дослідження показує наявність значного беклогу: серед багів, виправлених у 2024-2025 роках, близько 18% були створені 5-10 років тому, а 6,5% — понад 10 років тому.

Машинне навчання для прогнозування вразливостей

Зібрані дані стали основою для створення ML-моделі VulnBERT, яка аналізує коміти та оцінює ймовірність внесення вразливостей ще до злиття змін у код.

Під час тестування на комітах за 2024 рік модель показала:

  • 92,2% повноти виявлення помилок;
  • лише 1,2% хибних спрацьовувань;
  • значно кращі результати порівняно з класичними моделями на базі CodeBERT.

Модель не замінює рев’ю коду, але допомагає сфокусувати увагу розробників на найбільш ризикових змінах.

Цікаве спостереження

Майже 30% помилок у ядрі Linux з часом виправляють ті самі розробники, які їх і допустили. 

Це підкреслює важливість довгострокового володіння кодом і знання внутрішньої логіки підсистем, особливо для складних і стабільних частин ядра.

Чому це має значення для індустрії?

Ядро Linux лежить в основі серверів, хмарних платформ, контейнерних середовищ, пристроїв Android та вбудованих систем. Кожен день, коли помилка залишається непоміченою, збільшує ризики для безпеки та стабільності інфраструктури.

Дослідження Pebblebed показує: інструменти пошуку помилок стають ефективнішими, але складність ядра та накопичений код означають, що повністю автоматизувати процес неможливо. Саме тому поєднання автоматичного аналізу, фазингу й експертного рев’ю залишається критично важливим.

  • Реєструйтесь на курси Linux, щоб розуміти систему краще чи опанувати її з нуля. Так ви гарантовано знизите рівень своїх помилок

Залишити відповідь

Дякуємо, що поділились