Goal
A kernel CVE has landed, your security team wants it closed today, and the instance runs a production workload you can't reboot until the next window. On Oracle Linux instances in OCI, Ksplice patches the running kernel in memory. The patch takes effect straight away, and the instance keeps serving traffic.
Ksplice is installed by default on Oracle Linux platform images created after August 2017. On OCI it costs nothing extra and you don't need to register the instance with ULN.
Warning
Ksplice buys you time. It does not replace normal patching. Keep installing kernel packages with
dnf, and reboot into them in your regular maintenance windows. Once the next reboot loads the new kernel, Ksplice starts from that kernel's baseline.
1. Check the client and what's running
uname -r # kernel that was booted
rpm -q ksplice uptrack ksplice-tools 2>/dev/null
command -v ksplice uptrack-upgrade
There are two command sets. Both work against the same updates:
| Client | Typical commands | Notes |
|---|---|---|
Enhanced client (ksplice) | ksplice kernel show, ksplice -y kernel upgrade | Patches the kernel and, where supported, user-space libraries such as glibc and openssl |
Uptrack client (uptrack-*) | uptrack-show, uptrack-upgrade -y | Older name, used in many guides. On Oracle Linux 10 the Uptrack commands ship inside the ksplice package and are deprecated |
If neither package is installed (for example, on a custom image), install the online client:
sudo dnf install -y ksplice uptrack # Oracle Linux 8/9
sudo yum install -y ksplice uptrack # Oracle Linux 7
Package names vary by Oracle Linux version, so check what your repository offers with dnf list 'ksplice*' 'uptrack*'.
2. See what's applied and what's available
sudo ksplice kernel show # updates already applied in memory
sudo ksplice kernel show --available # updates you can apply now
sudo ksplice kernel uname -r # effective kernel version after Ksplice
The show output ends with a line such as Effective kernel version is 5.15.0-208.159.3.el9uek. Security scanners that read only uname -r will still report the booted version. Give the scanner team the effective version, or point the scanner at Ksplice-aware checks if it supports them.
To check whether a specific CVE is covered, search the available list:
sudo ksplice kernel show --available | grep -i CVE-2026-
On the Uptrack client:
sudo uptrack-show --available
uptrack-uname -r
3. Apply updates
Dry run first to list what would change:
sudo ksplice -n kernel upgrade
Apply the kernel updates:
sudo ksplice -y kernel upgrade
Apply user-space updates (enhanced client only) and confirm afterwards:
sudo ksplice -y user upgrade
sudo ksplice all show
The Uptrack equivalent for the kernel:
sudo uptrack-upgrade -y
Tip
Applying a patch usually takes a few seconds. On busy hosts, run it outside peak load anyway and watch application latency while it runs. Start with one instance per tier before you touch the rest of the fleet.
Which processes Ksplice can't patch
User-space patching has limits. Plan a restart (or the next reboot) for:
- PID 1 (systemd), which is never patched in place.
- Processes in chroots or containers that don't bind-mount
/var/cache/ksplice. - Programs that use
setcontext/swapcontext.
4. Verify and record
sudo ksplice kernel show | tail -5
sudo ksplice kernel show --available # should list nothing for the CVE you targeted
Record the effective version in the change ticket. To check many instances without SSH, run the same show commands through OCI Run Command, or through your own configuration management, and collect the output.
5. Make it automatic
Applied patches are cached in /var/cache/uptrack, and the client reapplies them early in boot. That way a reboot into the same kernel doesn't lose them. To have new updates installed as soon as they're published, edit /etc/uptrack/uptrack.conf:
autoinstall = yes
Leave the [Auth] accesskey that ships on OCI images alone. Then check that the setting is in place:
grep -E '^\s*autoinstall' /etc/uptrack/uptrack.conf
Caution
Auto-install changes the running kernel without a change window. For tightly controlled production, keep
autoinstall = noon the first ring and apply manually. Turn it on for dev and test instances so problems show up there first.
To stop Ksplice reapplying updates at boot (for example, while you troubleshoot a suspected Ksplice issue), create /etc/uptrack/disable or add nouptrack to the kernel command line. Remove updates that are already applied:
sudo ksplice kernel remove --all
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
Cannot find Ksplice Uptrack information for your kernel version | Booted kernel isn't one Ksplice supports (custom build, very old, or not yet indexed) | dnf update kernel* (or kernel-uek*) to a current kernel, reboot once in a window, then use Ksplice from there |
upgrade hangs or fails with connection errors | No outbound path from a private subnet to the Ksplice server | Check the route table for a NAT gateway, or set https_proxy. See the network checks below |
show --available is empty but the scanner still flags the CVE | Patch already applied in memory, and the scanner reads uname -r | Compare against ksplice kernel uname -r and attach the output as evidence |
| Updates vanish after reboot | Instance booted a different kernel from the one that was patched | Expected. Run ksplice kernel show --available on the new kernel |
ksplice: command not found on an older image | Only the Uptrack client is installed | Use uptrack-* commands, or dnf install ksplice |
| Patches not applied at boot | /etc/uptrack/disable exists or nouptrack is on the cmdline | Remove the flag file, or fix the GRUB entry |
Network checks from a private subnet
curl -sS -o /dev/null -w '%{http_code}\n' https://ksplice.oracle.com/
env | grep -i _proxy
oci network route-table get --rt-id <route-table-ocid> \
--query 'data."route-rules"[].{dest:destination,target:"network-entity-id"}' --output table
If the curl times out and the route table has no NAT gateway (or proxy) route for 0.0.0.0/0, the client can't reach the update server. The instance may still install RPMs through a service gateway to the regional yum mirror, but that doesn't prove Ksplice traffic follows the same path. Test the Ksplice endpoint itself.
For air-gapped hosts, Oracle provides an offline client (ksplice-offline, uptrack-offline) that installs updates from a local yum repository you mirror. That setup needs ULN access to build the mirror, so check the current Ksplice offline documentation before you plan it.
Prevent it next time
- Add
ksplice kernel show --availableto your weekly patch report, so outstanding live patches are visible before a CVE becomes urgent. - Turn on
autoinstall = yesin dev and test, and keep production manual or on a later ring. - Keep booted kernels current with OS Management Hub or
dnfin maintenance windows. Ksplice coverage is best on supported, recent kernels. - Make sure private subnets have a deliberate egress path (NAT gateway or proxy) for patch traffic, and document it in the network design.
- Give the security team the effective kernel version, so live-patched hosts aren't reported as vulnerable.