Как живое исправление ядра работает?

Если ядро постоянно используется Ubuntu, как возможно изменить его без перезагрузки?

2
задан 24 June 2017 в 19:36

2 ответа

Короче говоря, Живое исправление было представлено в v4.0 ядре, и Ubuntu 16.04 имеет ядро, способное к использованию этой возможности. Это работает при помощи ftrace для перенаправления вызовов функции ядра к недавно исправленным функциям. Кроме того, механизмы для сцепления во вставку модуля и удаления используются для исправления загружаемых модулей. Эта функция также имеет sysfs каталоги для отслеживания, какие патчи применяются и которое функционирует, они изменяют.

самый простой способ визуализировать это должно было бы рассматривать живое исправление как форму непрерывной функциональной замены при отслеживании то, чем патч (патчи) был (или были), представленный для вызывания этого изменения через записи на sysfs.

2
ответ дан 2 December 2019 в 01:36

Серверы или HPCs (Высокоэффективные Вычисления) предназначаются для работы 24x7x365 основание однако из-за основных обновлений системы защиты или обновлений ОС, они должны быть перезапущены для применения изменений. Ядро Linux живое исправление занимается этой проблемой и держится подальше от перезапусков.

Живое исправление начинается с создания патча для изменения особой функциональности ядра. Патч может быть сделан с инструментом как kpatch-сборка. Результатом является модуль ядра, который затем поставляется. В точке, когда этот модуль загружается, он гарантирует, что процессы с помощью определенного системного вызова используют его исправленную форму.

Существует три функции ядра, которые пробиваются исправления возможного.

  • Kprobes:

    Датчики Kprobes или ядра являются функцией, использованной разработчиками, чтобы оценить ядро Linux и выполнить отладку. Kprobes позволяет разработчикам ворваться в стандартные программы ядра во многих адресах кода. Это известно как точка останова и позволяет разработчику сделать некоторое перемещение, например, выполнить новый набор инструкций.

  • Ftrace:

    Следующий элемент называют Функциональным трассировщиком или Ftrace. Это - удивительная и мощная платформа для измерения нескольких аспектов в ядре, как события и прерывания. Например, это может измерить задержку конкретных функций как запись в диск.

  • Livepatch:

    Livepatch является третьим сегментом. Это - аналогично новое расширение на ядро. С пользовательским обработчиком Ftrace это может перенаправить стандартные программы и возврат к исправленному набору инструкций.

Живое исправление включает четыре существенных операции, которые определяют жизненный цикл каждого живого патча.

  1. Регистрация:

    Каждый патч должен сначала быть зарегистрирован с помощью klp_register_patch (). Это делает патч известным живой платформе патча. После некоторой начальной буквы, фигурирующей и проверяющей, патч включен в список известных патчей. Адреса исправленных функций найдены их именами. Специальные перемещения, на которые ссылаются в сегменте 'New Functions', применяются. Применимые разделы сделаны под/sys/kernel/livepatch/. Патч отклонен, когда любая операция перестала работать.

  2. Включение:

    Зарегистрированным патчам можно включить, любой путем вызова klp_enable_patch () или путем записи '1' к/sys/kernel/livepatch//включил. Система начнет использовать новую реализацию исправленных функций на данном этапе. А именно, если исходная функция исправляется fo в первый раз, функционально-специализированный struct_klp_ops создается, и обработчик Ftrace регистрируется.

  3. Отключение:

    Включенные патчи могут быть отключены, любой путем вызова klp_disable_patch () или путем записи '0' к/sys/kernel/livepatch//включил. На данном этапе или код от недавно включенного патча или даже исходный код привыкают. Патчи должны быть отключены в точно обратном порядке, в котором им включили. Это делает заботящийся о проблеме и использовании намного более простой.

  4. Нерегистрация:

    Отключенные патчи могут быть не зарегистрированы путем вызова klp_unregister_patch (). Это должно быть возможно как раз в то самое время, когда патч отключен, и код снова никогда не используется. Это нужно назвать, прежде чем живой модуль патча разгружен.

Чтобы проверить, активирована ли живая опция патча или нет, выполняет следующую команду:

cat /boot/config-$(uname - r) | grep LIVEPATCH
5
ответ дан 2 December 2019 в 01:36

Другие вопросы по тегам:

Похожие вопросы: