What a live patch actually changes
uname -r reports the same version as before, which is why compliance tools that only compare version strings keep reporting the server as vulnerable. That confusion is common enough that it has its own article: why uname -r still shows the old kernel after a security patch. Second, a live patch can only do what function replacement can do. That is where the limits come from.
The fixes a live patch cannot carry
- Changing the layout of a data structure that is already in use by live objects in memory. There are workarounds such as shadow variables, but they add complexity and not every fix fits them.
- Changing code that only runs at boot or initialization. That code already ran. Patching it changes nothing for the current boot.
- Changing low-level entry code, assembly, or functions that are inlined or excluded from tracing, because there is no clean call site to redirect.
Live patches expire too
BASH
# Kernel build that is actually running
uname -r
# Live patch modules loaded into this kernel (generic sysfs view, if supported)
ls /sys/kernel/livepatch/
# RHEL-family systems using kpatch
kpatch list
# Ubuntu systems using Canonical Livepatch
canonical-livepatch status --verboseLong uptime hides a different problem
/etc/fstab with a typo, a service started by hand but never enabled, firewall rules added at runtime but never saved, a network config edited months ago, a GRUB default that points somewhere unexpected. None of these show up while the server keeps running.
They show up when the server reboots on its own schedule instead of yours: a host maintenance event, a kernel panic, a power issue at the data center. From the support desk, this is a familiar pattern. A server with very long uptime restarts, sites stay down, and the cause turns out to be several unrelated changes stacked up over months, each of which would have been trivial to catch alone.
A planned reboot is also a regular test that the machine can recover. The longer you wait, the more changes go into that test at once, and the harder it is to tell which one broke it.
A production pattern that uses both
- Use live patching to close the window on urgent kernel vulnerabilities right away, without waiting for a maintenance slot.
- Keep installing full kernel updates through the normal package manager, so the newer kernel is ready to boot.
- Schedule regular reboots into the latest installed kernel at a cadence that fits your workload, for example monthly or at the next maintenance window after a kernel update.
- Before each reboot, take a snapshot or backup, confirm you have console access through your provider panel, and confirm which kernel will boot next.
- For clusters or load-balanced setups, reboot one node at a time and verify it rejoins before moving to the next.
BASH
# Debian/Ubuntu: these files exist when installed packages request a reboot
cat /var/run/reboot-required /var/run/reboot-required.pkgs 2>/dev/null
# RHEL-family (dnf-utils or yum-utils): exit code 1 means a reboot is recommended
needs-restarting -r; echo $?
# RHEL-family: which kernel GRUB will boot next
grubby --default-kernel