Компания Red Hat открыла код kpatch для организации обновления на лету ядра Linux
4 марта 2014 года
Компания Red Hat открыла под лицензией GPLv2 наработки проекта kpatch, в рамках которого подготовлена система динамического применения патчей к работающему ядру Linux. По своему назначению kpatch напоминает развиваемую компанией Oracle систему KSplice и анонсированный компанией SUSE проект kGraft, и также позволяет администраторам на лету устранять уязвимости и некоторые типы ошибок в ядре, без перезагрузки и остановки работы системы.
Принцип организации обновления ядра в kpatch напоминает kGraft и основывается на замене функций в ядре целиком, используя штатные средства подсистемы ftrace для перенаправления на новую функцию. Методы формирования и загрузки патча более близки к ksplice и также основаны на сравнении бинарных сборок. Отмечается, что реализация kpatch ещё до конца не стабилизирована, поэтому систему динамического обновления ядра пока не стоит использовать для промышленного применения. Инструкция по сборке и экспериментах с kpatch подготовлена для Fedora 20 (см. видеодемонстрацию). Горячие обновления могут быть сформированы для ядер Linux, начиная с выпуска 3.7.
После открытия кода kGraft, которое запланировано на март, между системами динамического обновления ядра от Red Hat и SUSE разразится конкурентная борьба по продвижению в состав основного ядра Linux. Не вызовет удивления, если компания Oracle откроет свежий исходный код KSplice и также подключится к борьбе за upstream. В настоящее время Ksplice является проприетарной разработкой. Ранний вариант Ksplice был открыт, но очень давно не обновлялся.
В состав kpatch входят следующие компоненты:
- kpatch-build - набор утилит для преобразования патча к исходным текстам ядра, созданного утилитой diff, в специализированный модуль ядра, осуществляющий наложение изменений на работающее ядро. Для оценки подлежащих замене компонентов осуществляется сборка двух бинарных образов ядра (vmlinux), один для состояния до наложения патча на код ядра, а второй - после наложения патча. Далее выявляются отличия между бинарными сборками и генерируется модуль горячего обновления ядра.
- Модуль горячего обновления ядра представляет собой обычный модуль ядра (файл с разрешением.ko), содержащий бинарные варианты изменённых функций ядра и метаданные об размещении оригинальных функций, подлежащих замене. Для применения патча нужно загрузить в ядро соответствующий модуль горячего обновления, для отката изменения и возвращения к исходному состоянию функций достаточно выгрузить модуль горячего обновления из ядра;
- Базовый модуль kpatch - модуль ядра, предоставляющий интерфейс для регистрации новых функций, определённых в модуле горячего обновления ядра. Для перенаправления вызова на новую функцию используется подсистема ftrace, при помощи которой ставится хук на инструкцию вызова старой функции для перенаправления обращения на новую функцию.
- Утилита kpatch с интерфейсом командной строки для управления коллекцией модулей горячего обновления ядра. Один или более подобных модулей могут быть настроены для применения в процессе загрузки, что позволяет системе сохранить работоспособность применённых в процессе работы горячих патчей, даже в случае перезагрузки сервера.
Основные ограничения:
- kpatch не может отслеживать изменение патчем динамически выделяемых структур данных, вся работа по анализу возможного пересечения с подобными структурами ложится на пользователя;
- Пока не поддерживаются патчи, затрагивающие статически определённые структуры данных. Присутствие подобных структур в патче определяется и приводит к выводу ошибки;
- Патчи не могут применяться к постоянно вызванным функциям ядра, таким как schedule(), а также к функциям, вызываемым только на стадии инициализации ядра;
- Пока не поддерживаются патчи к функциям модулей ядра (поддерживаются только патчи к функциям в его базовом образе).
Дополнение: интервью с руководителем SUSE Labs по поводу разработки kGraft.
Источники
правитьЛюбой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.