Kernel livepatch: failed to register patch / unresolved symbol — Исправление
Архитектура ошибки и симптомы сбоя
Ошибка «Kernel livepatch: failed to register patch / unresolved symbol» возникает при попытке динамического применения бинарного патча безопасности к работающему ядру Linux без перезагрузки (технологии kpatch, kGraft, Canonical Livepatch, Red Hat Kpatch). Ошибка означает, что загружаемый модуль патча не может разрешить адреса функций или смещения структур в таблице /proc/kallsyms запущенного ядра.
Диагностическая таблица параметров сбоя
| Параметр | Значение | Инженерный смысл сбоя |
|---|---|---|
| livepatch | Kernel Core Subsystem | Инфраструктура горячей подмены функций через ftrace (function tracer). |
| unresolved symbol | Linker Symbol Error | Имя функции или глобальной переменной ядра не найдено или имеет другое смещение. |
| EEXIST / ENOENT | Error Code | Конфликт с ранее примененным патчем или отсутствие целевого модуля ядра. |
Пошаговое дерево решений и сценарии траблшутинга
Сценарий 1: Проверка статуса и синхронизация версии ядра
Livepatch-модули строго привязаны к конкретному билду ядра (включая SHA-хеш компилятора):
# Проверка текущего статуса Canonical Livepatch (Ubuntu):
canonical-livepatch status --verbose
# Проверка активных kpatch-модулей (RHEL / AlmaLinux):
kpatch list
# Сверка точной версии ядра:
uname -r
cat /proc/versionСценарий 2: Перерегистрация агента Livepatch
Если ядро было обновлено через пакетный менеджер, но сервер не перезагружался:
# Сброс и повторная инициализация агента (Ubuntu):
sudo canonical-livepatch disable
sudo canonical-livepatch enable <YOUR_API_KEY>
# Проверка журнала ошибок службы:
journalctl -u canonical-livepatch -n 50 --no-pagerСценарий 3: Проверка доступности ftrace
Горячий патчинг не работает, если в ядре отключен функционал трассировки ftrace:
# Проверка параметра ядра:
cat /sys/kernel/debug/tracing/tracing_on
# Включение трассировки:
echo 1 | sudo tee /sys/kernel/debug/tracing/tracing_onITSTM внедряет решения безопасного патчинга ядер (Kpatch / Livepatch / TuxCare) на критических B2B-кластерах с гарантией 99.99% uptime.
Частые вопросы (FAQ)
Почему livepatch выдает unresolved symbol после установки DKMS-драйвера?
DKMS-драйверы могут изменять структуры данных ядра или перехватывать системные вызовы, нарушая валидацию контрольных сумм интерфейсов ядра (Module CRC), что делает применение официальных патчей невозможным.
Безопасен ли Livepatch для серверов баз данных?
Да, механизм Livepatch использует безопасную модель перехода (Consistency Model): функции подменяются только тогда, когда ни один процесс не исполняет их код в текущем стеке вызовов.