Кпатч
Разработчик(и) | Красная шляпа |
---|---|
Первоначальный выпуск | 26 февраля 2014 г. [1] |
Стабильная версия | 0.9.9 [2] / 28 июля 2023 г |
Репозиторий | |
Операционная система | Линукс |
Тип | Расширение ядра |
Лицензия | GNU GPL версия 2 |
Веб-сайт | github |
kpatch — это функция ядра Linux , которая реализует оперативное исправление работающего ядра , что позволяет исправления применять ядра, пока ядро все еще работает. Избегая необходимости перезагрузки системы с новым ядром, содержащим нужные исправления, kpatch стремится максимизировать время безотказной работы и доступность системы . В то же время kpatch позволяет применять обновления безопасности, связанные с ядром, не откладывая их до запланированных простоев . [1] [3] Внутренне kpatch позволяет целые функции в работающем ядре их исправленными версиями, делая это безопасно, останавливая все запущенные процессы на время выполнения оперативного исправления. заменять [4]
kpatch разработан Red Hat , его исходный код лицензируется на условиях GNU General Public License версии 2 (GPLv2). [1] В мае 2014 года kpatch был представлен для включения в основную ветку ядра Linux . [5] а минималистичные основы оперативного исправления были объединены в основную ветку ядра Linux в версии ядра 4.0, выпущенной 12 апреля 2015 года. [6]
Внутренности
[ редактировать ]Внутренне kpatch состоит из двух частей: основной модуль ядра выполняет механизм оперативного исправления, изменяя внутреннюю работу ядра, а набор утилит пользовательского пространства подготавливает отдельные модули ядра для горячего исправления из различий исходного кода и управляет их применением. Обновление ядра в реальном времени выполняется на уровне функций . Это означает, что kpatch может заменять целые функции в работающем ядре их исправленными версиями, используя возможности, предоставляемые ftrace, для «обхода» старых версий функций; таким образом, горячие участки также можно легко отменить. ядра Никакие изменения во внутренних структурах данных невозможны; однако исправления безопасности , которые являются одними из естественных кандидатов для использования с kpatch, редко содержат изменения в структурах данных ядра. [4] [5] [7]
и безопасное применение горячих исправлений, kpatch гарантирует атомарное останавливая все запущенные процессы на время применения горячего исправления и гарантируя, что ни один из остановленных процессов не работает внутри функций , которые должны быть исправлены. Такой подход упрощает весь механизм оперативного исправления и предотвращает определенные проблемы, связанные с использованием структур данных исходными и исправленными версиями функций. Недостатком этого подхода является то, что он также оставляет возможность сбоя горячего исправления и приводит к небольшой задержке, необходимой для остановки всех запущенных процессов. [4] [5] [7]
История
[ редактировать ]Red Hat анонсировала и публично выпустила kpatch в феврале 2014 года на условиях GNU General Public License версии 2 ( GPLv2 ), [1] незадолго до этого SUSE выпустила собственную реализацию исправлений ядра под названием kGraft . [8] kpatch был объединен с основной веткой ядра Linux и был представлен для включения в мае 2014 года. [5] [9]
kpatch был включен в Red Hat Enterprise Linux 7.0, выпущенную 10 июня 2014 г., в качестве технологической предварительной версии . [10] [11]
Минималистичные основы для оперативного исправления ядра были объединены в основную ветку ядра Linux в версии ядра 4.0, выпущенной 12 апреля 2015 года. Эти основы, основанные в первую очередь на функциональности ядра ftrace , образуют общее ядро, способное поддерживать горячее исправление как с помощью kpatch, так и с помощью kpatch. и kGraft, предоставляя интерфейс прикладного программирования (API) для модулей ядра, содержащих «горячие» исправления, и двоичный интерфейс приложений (ABI) для утилит управления пользовательским пространством. Однако общее ядро, входящее в ядро Linux 4.0, поддерживает только архитектуру x86 и не предоставляет никаких механизмов для обеспечения согласованности на уровне функций во время применения горячих исправлений. [6] [12] [13]
С апреля 2015 года продолжается работа по переносу kpatch на общее ядро оперативного исправления, предоставляемое основной веткой ядра Linux. [13] Однако реализация необходимых механизмов согласованности на уровне функций была отложена, поскольку стеки вызовов, предоставляемые ядром Linux, могут быть ненадежными в ситуациях, когда ассемблерный код не содержит надлежащих кадров стека ; в результате работы по переносу продолжаются по состоянию на сентябрь 2015 г. [update]. In an attempt to improve the reliability of kernel's call stacks, a specialized sanity-check stacktool . Также была разработана утилита пользовательского пространства [14] [15]
См. также
[ редактировать ]- Динамическое обновление программного обеспечения — область исследований, направленная на обновление программ во время их работы.
- kexec — метод загрузки совершенно нового ядра Linux из работающей системы.
- Ksplice и KernelCare , другие технологии оперативного исправления ядра Linux, разработанные Ksplice, Inc. (позже приобретенная Oracle) и CloudLinux соответственно.
Ссылки
[ редактировать ]- ^ Jump up to: а б с д Джош Пуамбёф; Сет Дженнингс (26 февраля 2014 г.). «Представляем kpatch: динамическое исправление ядра» . redhat.com . Проверено 23 июля 2014 г.
- ^ «Релиз 0.9.9» . 28 июля 2023 г. . Проверено 18 сентября 2023 г.
- ^ Шон Майкл Кернер (6 июня 2014 г.). «Исправление ядра Linux становится динамичным» . СерверВотч . Проверено 23 июля 2014 г.
- ^ Jump up to: а б с Джонатан Корбет (7 мая 2014 г.). «Первая подача kpatch» . LWN.net . Проверено 23 июля 2014 г.
- ^ Jump up to: а б с д Джош Пуамбёф (1 мая 2014 г.). «kpatch: динамическое исправление ядра» . LWN.net . Проверено 23 июля 2014 г.
- ^ Jump up to: а б «Ядро Linux 4.0, раздел 1.2. Оперативное обновление» . kernelnewbies.org . 26 апреля 2015 года . Проверено 27 апреля 2015 г.
- ^ Jump up to: а б с Сет Дженнингс; Джош Пуамбеф (10 июня 2014 г.). «Динамическое исправление ядра» . Красная шляпа . Проверено 23 июля 2014 г.
- ^ «SUSE выпускает kGraft для оперативного исправления ядра Linux» . СУЗЕ . 27 марта 2014 года . Проверено 11 февраля 2015 г.
- ^ Майкл Ларабель (1 мая 2014 г.). «SUSE публикует kGraft, Red Hat публикует патчи Kpatch» . Фороникс . Проверено 23 июля 2014 г.
- ^ «Примечания к выпуску Red Hat Enterprise Linux 7.0, глава 5. Ядро» . Красная шляпа . 15 июля 2014 года . Проверено 23 июля 2014 г.
- ^ Карлос Санчес (26 июня 2014 г.). «Red Hat выпускает Red Hat Enterprise Linux 7 с расширенной поддержкой контейнеров Linux» . infoq.com . Проверено 23 июля 2014 г.
- ^ Джонатан Корбет (25 февраля 2015 г.). «Черновой патч для живого исправления» . LWN.net . Проверено 27 апреля 2015 г.
- ^ Jump up to: а б «Дерево исходного кода ядра Linux: kernel/git/torvalds/linux.git: получить инфраструктуру оперативного исправления от Иржи Косина» . ядро.орг . 11 февраля 2015 года . Проверено 27 апреля 2015 г.
- ^ Джонатан Корбет (30 сентября 2015 г.). «Проверка стека во время компиляции» . LWN.net . Проверено 2 октября 2015 г.
- ^ Джош Пуамбеф (24 сентября 2015 г.). «Документация ядра Linux: Documentation/stack-validation.txt (из патча v13)» . LWN.net . Проверено 2 октября 2015 г.