Що таке заплямоване ядро ​​в Linux?


99

За певних умов ядро ​​Linux може пошкодитися . Наприклад, завантаження власного відеодрайвера в ядро ​​загрожує ядром. Ця умова може бути помітна в системних журналах, повідомленнях про помилки ядра (oops and panics), а також через такі інструменти, як lsmod, і залишається до перезавантаження системи.

Що це значить? Чи впливає це на мою здатність користуватися системою і як це може вплинути на мої варіанти підтримки?


можливий дублікат виходів lsmod: Не заплямовано
Gilles

@Gilles, я думаю, що питання, з яким ви зв'язалися, слід об'єднати в це. Також не очевидно, що одне питання є дублікатом іншого.
bwDraco

1
Я сподіваюся зробити це канонічною версією питання; дивіться останню редакцію питання.
bwDraco

9
@MichaelMrozek: 1) Я не бачив існуючий питання, так як це не було очевидно , що користувач запитує «що означає" зіпсований "означає", і 2) питання , як сформульований досить специфічно для однієї команди lsmod. Я написав це запитання і відповів, щоб зробити його більш загальним, щоб хтось, запитуючи "що означає" брудне "означає, легко його знайшов.
bwDraco

1
Вони могли вживати слово, яке було трохи більш нейтральним, ніж «заплямоване».
Роджер Дал

Відповіді:


125

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

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

Ця функція призначена для визначення умов, які можуть ускладнити правильне усунення проблеми з ядром. Наприклад, завантаження власного модуля може зробити висновок налагодження ядра ненадійним, оскільки розробники ядра не мають доступу до вихідного коду модуля і тому не можуть визначити, що модуль може зробити з ядром. Так само, якщо ядро ​​раніше відчувало помилку або якщо сталася серйозна помилка апаратного забезпечення, інформація про налагодження, згенерована ядром, може бути не достовірною.

Ядро може пошкодитися з будь-якої з кількох причин , включаючи (але не обмежуючись ними) наступну:

  • Використання фірмового (або не сумісного з GPL) модуля ядра - це найпоширеніша причина забруднених ядер і зазвичай є результатом завантаження фірмових NVIDIA або AMD-драйверів відео
  • Використання драйверів постановки , які є частиною вихідного коду ядра, але не повністю перевірені
  • Використання деревних модулів, які не входять до вихідного коду ядра Linux
  • Примусове завантаження або вивантаження модуля ядра (наприклад, примусове вставлення модуля, не вбудованого для поточної версії ядра)
  • Використання ядра SMP (багатопроцесорного) для певних непідтримуваних однопроцесорних процесорів, насамперед старих процесорів AMD Athlon
  • Перевизначення ACPI DSDT, іноді необхідне для виправлення помилок управління живленням (детальніше див. Тут )
  • Деякі критичні умови помилки, такі як винятки машинної перевірки та відключення ядра
  • Певні серйозні помилки в прошивці системи (BIOS, UEFI), над якою має працювати ядро

Кожна з цих умов представлена ​​певним прапором у ядрі. Деякі постачальники Linux, такі як SUSE, додають додаткові прапорці забарвлення, щоб вказати такі умови, як завантаження модуля, який не підтримується постачальником.

Більш детальна інформація доступна в документації на ядро . Перелічені там прапори неповторності (з _ stand-in для 'blank')

  • G | P : G, якщо всі завантажені модулі мають GPL або сумісну ліцензію, інакше завантажений власний модуль. Модулі без MODULE_LICENSE або з MODULE_LICENSE, які insmod не визнається сумісними з GPL, вважаються власницькими.
  • F | _ : якщо будь-який модуль був силою, завантажений "insmod -f" в іншому випадку, якщо всі модулі завантажені нормально.
  • S | _ : якщо ой стався на ядрі SMP, що працює на апаратному забезпеченні, яке не сертифіковане як безпечне для запуску багатопроцесорного пристрою. В даний час це відбувається лише у різних атлонів, які не здатні до SMP.
  • R | _ : якщо модуль був вивантажений силою rmmod -f, в іншому випадку, якщо всі модулі були завантажені нормально.
  • M | _ : якщо будь-який процесор повідомив про виключення з машини , в іншому випадку не сталося виключень машинної перевірки.
  • B | _ : якщо функція випуску сторінки знайшла неправильну посилання на сторінку або якісь несподівані прапори сторінки.
  • U | _ : якщо користувач або користувальницька програма спеціально просили встановити прапор Порізаний.
  • D | _ : якщо ядро ​​загинуло недавно, тобто був OOPS або BUG.
  • A | _ : якщо таблицю ACPI було замінено
  • W | _ : якщо попередньо було видано попередження ядром (Хоча деякі попередження можуть встановлювати більш конкретні прапорці відтінку).
  • C | _ : якщо завантажений драйвер постановки.
  • I | _ : якщо ядро ​​працює навколо серйозної помилки в прошивці платформи (BIOS або подібного).
  • O | _ : якщо завантажений зовнішній ("поза деревом") модуль.
  • E | _ : якщо непідписаний модуль був завантажений у підпис підтримуючого модуля ядра.
  • L | _ : якщо раніше в системі відбулося м'яке блокування.
  • K | _ : якщо ядро ​​було зафіксовано в реальному часі.

У цій відповіді бракує багато інформації з переміщеного цього питання.

2
Я б додав хоча б одну важливу можливість сценарію "непідписаний модуль" - rootkit ядра був завантажений в ядро, або експлуатування ядра тільки що виконується.
kravietz
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.