Linux kernel live patching là gì?

Linux kernel live patching là cách vá lỗi cho kernel đang chạy bị lỗi mà không cần khởi động lại hệ điều hành Linux.

Thông thường Linux kernel đang chạy bị lỗi sẽ cần phải cài kernel mới đã được biên dịch kèm theo bản vá lỗi và khởi động lại hệ điều hành Linux để chạy với kernel mới.

cat /etc/os-release
NAME="Rocky Linux"
VERSION="9.3 (Blue Onyx)"
ID="rocky"
ID_LIKE="rhel centos fedora"
VERSION_ID="9.3"
PLATFORM_ID="platform:el9"
PRETTY_NAME="Rocky Linux 9.3 (Blue Onyx)"
ANSI_COLOR="0;32"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:rocky:rocky:9::baseos"
HOME_URL="https://rockylinux.org/"
BUG_REPORT_URL="https://bugs.rockylinux.org/"
SUPPORT_END="2032-05-31"
ROCKY_SUPPORT_PRODUCT="Rocky-Linux-9"
ROCKY_SUPPORT_PRODUCT_VERSION="9.3"
REDHAT_SUPPORT_PRODUCT="Rocky Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="9.3"

uname -a
Linux DevSecOps-Edu-VN 5.14.0-362.8.1.el9_3.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Nov 8 17:36:32 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

uname -r
5.14.0-362.8.1.el9_3.x86_64

dnf update
Last metadata expiration check: 0:00:34 ago on Wed 10 Jan 2024 12:37:00 AM +07.
Dependencies resolved.
=======================================================================================================================================
 Package                        Architecture          Version                                         Repository             Size
=======================================================================================================================================
Installing:
 kernel                         x86_64                5.14.0-362.13.1.el9_3                           baseos                5.0 M
Upgrading:
 firewalld                           noarch                1.2.5-2.el9_3                                   baseos                446 k
 firewalld-filesystem                noarch                1.2.5-2.el9_3                                   baseos                8.2 k
 kernel-tools                        x86_64                5.14.0-362.13.1.el9_3                           baseos                5.2 M
 kernel-tools-libs                   x86_64                5.14.0-362.13.1.el9_3                           baseos                5.0 M
 libsss_certmap                      x86_64                2.9.1-4.el9_3.1                                 baseos                 93 k
 libsss_idmap                        x86_64                2.9.1-4.el9_3.1                                 baseos                 44 k
 libsss_nss_idmap                    x86_64                2.9.1-4.el9_3.1                                 baseos                 48 k
 libsss_sudo                         x86_64                2.9.1-4.el9_3.1                                 baseos                 38 k
 libxml2                             x86_64                2.9.13-5.el9_3                                  baseos                746 k
 microcode_ctl                       noarch                4:20230808-2.20231009.1.el9_3                   baseos                7.7 M
 policycoreutils                     x86_64                3.5-3.el9_3                                     baseos                206 k
 python3-firewall                    noarch                1.2.5-2.el9_3                                   baseos                348 k
 rocky-gpg-keys                      noarch                9.3-1.2.el9                                     baseos                 13 k
 rocky-release                       noarch                9.3-1.2.el9                                     baseos                 23 k
 rocky-repos                         noarch                9.3-1.2.el9                                     baseos                 13 k
 sssd-client                         x86_64                2.9.1-4.el9_3.1                                 baseos                162 k
 sssd-common                         x86_64                2.9.1-4.el9_3.1                                 baseos                1.6 M
 sssd-kcm                            x86_64                2.9.1-4.el9_3.1                                 baseos                111 k
 tzdata                              noarch                2023d-1.el9                                     baseos                433 k
Installing dependencies:
 kernel-core                         x86_64                5.14.0-362.13.1.el9_3                           baseos                 20 M
 kernel-modules                      x86_64                5.14.0-362.13.1.el9_3                           baseos                 37 M
 kernel-modules-core                 x86_64                5.14.0-362.13.1.el9_3                           baseos                 32 M

Transaction Summary
=======================================================================================================================================
Install   4 Packages
Upgrade  19 Packages

Total download size: 116 M
Is this ok [y/N]: 

dnf liệt kê các Linux kernel mới để cài

dnf list kernel

Installed Packages
kernel.x86_64                  5.14.0-362.8.1.el9_3        @minimal

Available Packages
kernel.x86_64                  5.14.0-362.13.1.el9_3       baseos

Khởi động lại Linux server là 1 việc có thể ảnh hưởng đến hoạt động kinh doanh vì Linux server đó đang chạy ứng dụng có nhiều người truy cập.

Khởi động lại Linux server cũng làm các dịch vụ của máy khác bị ảnh hưởng vì nó móc vào Linux server cần khởi động.

Linux kernel có tùy chọn bật chức năng Kernel Live Patching khi biên dịch để có thể vá lỗi cho kernel đang chạy.

Kernel Live Patching

CONFIG_LIVEPATCH:

Say Y here if you want to support kernel live patching.
This option has no runtime impact until a kernel "patch"
module uses the interface provided by this option to register
a patch, causing calls to patched functions to be redirected
to new function code contained in the patch module.

Symbol: LIVEPATCH [=y]
Type  : bool
Defined at kernel/livepatch/Kconfig:7
  Prompt: Kernel Live Patching
  Depends on: (DYNAMIC_FTRACE_WITH_REGS [=y] || DYNAMIC_FTRACE_WITH_ARGS [=y]) && MODULES [=y] && SYSFS [=y] && KALLSYMS_ALL [=y] && HAVE_LIVEPATCH [=y] && !TRIM_UNUSED_KSYMS [=n]
  Location:
    -> Processor type and features
      -> Kernel Live Patching (LIVEPATCH [=y])