дозволяті Виконання вікліків для записах. Внаслідок цього помилка в драйвері, якому дозволено Тільки читання, що не может прізвесті до Випадкове Пошкодження корістувацького адресного простору.
Порівняємо Цю сітуацію з можливіть поведінкою драйвера у монолітному ядрі. Помилка в коді может прізвесті до запису в адресній простір корістувацького процеса вместо читання з нього, что зруйнує процес. Крім того, ядерний драйвер может віклікаті будь-яку функцію в усьому ядрі, включаючі Функції, Які НЕ повінні віклікаті драйверами. Оскількі відсутня будь-яка внутрішньоядерні захист, це практично Неможливо Запобігти. У Нашій розробці Жоден драйвер НЕ может віклікаті ядерно функцію, яка НŠ​​булу явно експортована як частина інтерфейсу между ядром и ЦІМ драйвером.
Заборона доступу до портів ВСТУП-Виведення
Для шкірного драйвера в ядрі підтрімується список портів ВСТУП-Виведення, з якіх ВІН может читать, а такоже тихий, у Які ВІН может писати. Читання и запис захіщаються по окремо, так что процес, у Якого є право на Тільки читання з Деяк порту вводу-виводу, що не может писати в нього. Будь-яка Спроба Порушення ціх правил виробляти до Вироблення кодом помилки, что повертається заклікають участника. Таким чином, драйвер друку может буті обмеженності доступом Тільки до портів ВСТУП-Виведення принтера, аудіо-драйвер может буті обмеженності доступом Тільки до портів ВСТУП-Виведення звукової карти І т.д.
На відміну від цього, в монолітніх системах відсутній способ обмеження доступу внутрішньоядерної драйвера Тільки до невеликого числа портів ВСТУП-Виведення. Ядерний драйвер может Випадкове віконаті запис в будь-який порт вводу-виводу и завдаті істотної Шкода.
У Деяк випадка в адресному простір драйвера могут відображатіся реальні регістрі Пристрої ВСТУП-Виведення, щоб унікнуті Якого б то Не було взаємодії з ядром при здійсненні ВСТУП-Виведення. Однак, оскількі не в усіх архітектурах допускається відображення регістрів ВСТУП-Виведення в прізначені для користувача Процеси Із ЗАБЕЗПЕЧЕННЯМ необхідного уровня захисту, мі вибрать модель, в якій реальні Операції ВСТУП-Виведення віконуються Тільки ядром. Це проектне решение є ще одним прикладом того, что мі віддаємо ПЕРЕВАГА надійності на шкоду ефектівності.
хочай в Данії годину табліці, что дозволяють доступ до портів ВСТУП-Виведення, ініціалізуваліся з конфігураційного файлу, мі Плануємо реалізуваті сервер шини PCI, Який буде делать це автоматично. Сервер шини PCI может отріматі з BIOS псуй ВСТУП-Виведення, необхідні шкірному драйверу, І використовуват Цю інформацію для ініціалізації таблиць ядра.
Перевірка параметрів
Оскількі ВСІ Виклики ядра проводяться Шляхом генерації внутрішнього переривані, ядро может віконаті обмеженності валідацію параметрів до діспетчерізації Дзвінка. Ця валідація Включає перевіркі як справності (sanity), так и прав доступу (permission). Наприклад, ЯКЩО драйвер просити ядро ​​записатися блок даніх з використаних ФІЗИЧНОЇ адресації, то цею виклик может буті відхіленій, оскількі не в усіх драйверів є право на Такі Дії. Вікорістовуючі віртуальну адресацію, ядро, мабуть, Не зможу Сказати, чи є ця адреси запису Правильно, альо воно, прінаймні, зможите перевіріті, что ця адреси Дійсно є допустимим адресою в сегменті даніх або стека корістувацького процеса, а не відносіться до сегменту тексту и НЕ є якімось Випадкове недійснім адресою.
хочай Такі перевіркі справності є грубим, це краще, чем Нічого. У монолітніх системах ніщо НЕ перешкоджає драйверу Виконувати запис за адресами, за Якими НЕ можна писати нема за якіх умів, таким як адреси в сегменті тексту ядра.
Відлов поганих покажчіків
У програмах на мовах C и C + + вікорістовується безліч покажчіків, и ці програми весь годину схільні помилок, пов'язаних з використаних поганих покажчіків. Разменованіе невірного покажчика часто виробляти до Виявлення апаратурою помилки сегментації. У Нашій розробці сервер або драйвер, что намагають разіменовать поганий покажчик, примусово завершуються, и Видається дамп пам'яті для майбутньої налагодження, точно так само, як и для других корістувальніцькіх процесів. Если поганий покажчик віявляється в частіні операційної системи, что віконується в режімі користувача, то сервер реінкарнації негайно помічає наявність збійної сітуації и замінює примусово завершень процес его свіжою копією.
Приборкання нескінченніх ціклів
Колі драйвер впадає в нескінченній цикл, це створює ЗАГРОЗА споживання нескінченного годині ЦП. Планувальнік зауважує наявність Такої поведінкі и поступово зніжує Пріоритет несправностей процеса, поки ВІН НЕ становится непрацюючий процесом. Прото Інші Процеси могут продовжуваті нормально працювати. После вічерпання зумовленості інтервалу годині сервер реінкарняціі помітіть, что Данії драйвер НЕ відповідає на запиті, примусово завершити и перезапустити его.
На відміну від цього, коли в нескінченній цикл впад...