
Linux कर्नेल अपग्रेड गाइड - CVE-2026-53359 को ठीक करें
声明: 本文仅记录本人服务器环境下的修复过程,并非安全专业分析。如有不当之处,欢迎指正。
验证说明: 经源码比对确认,Linux Kernel 7.1.3 已包含修复 commit
81ccda30b4e8("KVM: x86: Fix shadow paging use-after-free due to unexpected role"),该补丁在arch/x86/kvm/mmu/mmu.c的kvm_mmu_get_child_sp()函数中增加了role.word匹配条件,从根本上消除了因 role 不匹配导致的 shadow paging UAF。因此,升级至 7.1.3 可以有效修复此漏洞。
本文档提供两种方式将 Linux Kernel 升级至 7.1.3,用于修复 CVE-2026-53359:ELRepo RPM 安装(推荐)和源码编译。
| 项目 | 说明 |
|---|
| CVE 编号 | CVE-2026-53359 |
| 漏洞组件 | Linux Kernel KVM x86 Shadow MMU |
| 漏洞类型 | Use After Free (UAF) |
| 修复方式 | 升级 Linux Kernel 至 7.1.3(ELRepo RPM 或源码编译) |
漏洞影响:
KVM x86 Shadow Paging 场景中,异常情况下可能出现释放后的页面仍被 rmap 条目引用,引发内存安全问题。
漏洞参考:
| 项目 | 信息 |
|---|---|
| 系统 | CentOS Stream 8 |
| 升级前内核 | 6.18.8-1.el8.elrepo.x86_64 |
| 升级后内核 | 7.1.3 |
| 架构 | x86_64 |
| 虚拟化 | KVM Intel |
查看当前环境:
cat /etc/os-release
uname -r
本教程提供两种升级方式,可根据环境选择:
适用于能正常访问 ELRepo 仓库的环境,无需编译,操作简单。
# 导入 ELRepo GPG 密钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# 安装 ELRepo 仓库
dnf install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm
# 安装最新主线内核
dnf --enablerepo=elrepo-kernel install kernel-ml
# 设置新内核为默认启动项
grubby --set-default /boot/vmlinuz-7.1.3-1.el8.elrepo.x86_64
# 重启生效
reboot
注意: 内核版本号可能因 ELRepo 更新而变化,请以实际安装的版本为准。安装后可用
ls /boot/vmlinuz-*查看。
适用于无法访问 ELRepo 仓库,或需要使用 kernel.org 官方 stable 版本的环境。具体步骤见下方。
由于本人服务器环境中:
因此采用:
kernel.org 官方 stable 源码编译方式升级内核。
说明:
该方案仅为本人服务器环境下的解决方法,不代表所有环境必须使用源码编译。
官方下载:
https://cdn.kernel.org/pub/linux/kernel/v7.x/linux-7.1.3.tar.xz
下载命令:
wget https://cdn.kernel.org/pub/linux/kernel/v7.x/linux-7.1.3.tar.xz
上传位置(离线环境):
/root/linux-7.1.3.tar.xz
dnf groupinstall "Development Tools" -y
dnf install -y \
ncurses-devel \
elfutils-libelf-devel \
openssl-devel \
bc \
bison \
flex \
perl \
dwarves
mkdir -p /usr/src
cd /usr/src
tar -xf /root/linux-7.1.3.tar.xz
cd linux-7.1.3
ls Makefile # 应显示: Makefile
# 复制当前配置
cp /boot/config-$(uname -r) .config
# 生成新配置
make olddefconfig
# 检查 KVM 配置
grep -E "CONFIG_KVM|CONFIG_KVM_INTEL" .config
预期输出:
CONFIG_KVM=m
CONFIG_KVM_X86=m
CONFIG_KVM_INTEL=m
# 查看 CPU 线程数
nproc
# 编译(使用所有核心)
make -j$(nproc)
# 验证内核镜像
ls -lh arch/x86/boot/bzImage
注意: 编译时间取决于 CPU 和存储性能。
# 安装模块
make modules_install
# 验证安装
ls /lib/modules/
# 检查 KVM 模块
find /lib/modules/7.1.3 -name "kvm*.ko*"
预期输出:
kvm.ko
kvm-intel.ko
kvm-amd.ko
# 安装内核
make install
# 验证安装
ls -lh /boot | grep 7.1.3
预期输出:
vmlinuz-7.1.3
initramfs-7.1.3.img
System.map-7.1.3
# 生成 GRUB 配置
grub2-mkconfig -o /boot/grub2/grub.cfg
# 设置默认内核
grubby --set-default /boot/vmlinuz-7.1.3
# 验证默认内核
grubby --default-kernel
预期输出:
/boot/vmlinuz-7.1.3
reboot
查看内核版本:
uname -r
# 预期: 7.1.3
查看 KVM 模块:
lsmod | grep kvm
# 预期: kvm_intel, kvm, irqbypass
验证 KVM 模块位置:
modinfo kvm_intel | grep filename
# 预期: /lib/modules/7.1.3/kernel/arch/x86/kvm/kvm-intel.ko
重要: 旧内核不应立即删除。
列出可用内核:
grubby --info=ALL | grep kernel
如果新内核有问题,设置旧内核:
grubby --set-default /boot/vmlinuz-6.18.8-1.el8.elrepo.x86_64
reboot
| 项目 | 升级前 | 升级后 |
|---|---|---|
| 内核版本 | 6.18.8-1.el8.elrepo.x86_64 | 7.1.3 |
| KVM 状态 | N/A | 已启用 |
| CVE-2026-53359 | 受影响 | 已修复 |
अस्वीकरण: यह केवल मेरे सर्वर वातावरण में सुधार प्रक्रिया का दस्तावेज़ीकरण है। यह कोई पेशेवर सुरक्षा विश्लेषण नहीं है। सुधारों का स्वागत है।
सत्यापन नोट: स्रोत कोड तुलना से पुष्टि होती है कि Linux Kernel 7.1.3 में फिक्स कमिट
81ccda30b4e8("KVM: x86: Fix shadow paging use-after-free due to unexpected role") शामिल है। पैचarch/x86/kvm/mmu/mmu.cमेंkvm_mmu_get_child_sp()फंक्शन मेंrole.wordमिलान की शर्त जोड़ता है, जिससे भूमिका बेमेल के कारण होने वाले शैडो पेजिंग UAF को मूल रूप से समाप्त कर दिया गया है। इसलिए, 7.1.3 में अपग्रेड करने से यह भेद्यता प्रभावी रूप से ठीक हो जाती है।
यह मार्गदर्शिका CVE-2026-53359 को ठीक करने के लिए Linux Kernel को 7.1.3 में अपग्रेड करने के दो तरीके प्रदान करती है: ELRepo RPM इंस्टालेशन (अनुशंसित) और स्रोत से बिल्ड करना।
| आइटम | विवरण |
|---|---|
| CVE ID | CVE-2026-53359 |
| प्रभावित घटक | Linux Kernel KVM x86 Shadow MMU |
| भेद्यता प्रकार | Use After Free (UAF) |
| सुधार विधि | Linux Kernel को 7.1.3 में अपग्रेड करें (ELRepo RPM या स्रोत से बिल्ड) |
भेद्यता KVM x86 शैडो पेजिंग से संबंधित है। विशिष्ट परिस्थितियों में, मुक्त किए गए पृष्ठ अभी भी rmap प्रविष्टियों द्वारा संदर्भित हो सकते हैं, जिससे संभावित मेमोरी सुरक्षा समस्या उत्पन्न हो सकती है।
संदर्भ:
| आइटम | मान |
|---|---|
| OS | CentOS Stream 8 |
| पुराना कर्नेल | 6.18.8-1.el8.elrepo.x86_64 |
| नया कर्नेल | 7.1.3 |
| आर्किटेक्चर | x86_64 |
| वर्चुअलाइज़ेशन | KVM Intel |
| कंपाइलर | GCC 8.5 |
वर्तमान वातावरण जांचें:
cat /etc/os-release
uname -r
यह मार्गदर्शिका दो अपग्रेड विधियाँ प्रदान करती है। अपने वातावरण के अनुसार चुनें:
ELRepo रिपॉजिटरी तक विश्वसनीय पहुँच वाले वातावरण के लिए। किसी संकलन की आवश्यकता नहीं है।
# ELRepo GPG कुंजी आयात करें
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# ELRepo रिपॉजिटरी स्थापित करें
dnf install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm
# नवीनतम मेनलाइन कर्नेल स्थापित करें
dnf --enablerepo=elrepo-kernel install kernel-ml
# नए कर्नेल को डिफ़ॉल्ट बूट प्रविष्टि के रूप में सेट करें
grubby --set-default /boot/vmlinuz-7.1.3-1.el8.elrepo.x86_64
# लागू करने के लिए रीबूट करें
reboot
नोट: ELRepo अपडेट के साथ कर्नेल संस्करण संख्याएँ बदल सकती हैं।
ls /boot/vmlinuz-*से वास्तविक स्थापित संस्करण की जाँच करें।
उन वातावरणों के लिए जहाँ ELRepo तक पहुँच नहीं है, या जब आधिकारिक kernel.org स्थिर रिलीज़ की आवश्यकता हो। विस्तृत चरण नीचे दिए गए हैं।
मेरे वातावरण में:
इसलिए:
मैंने आधिकारिक kernel.org स्थिर स्रोत कोड का उपयोग किया और Kernel 7.1.3 को मैन्युअल रूप से बिल्ड किया।
नोट:
यह मेरा स्वयं का वातावरण समाधान है, सभी प्रणालियों के लिए अनिवार्य अपग्रेड विधि नहीं है।
आधिकारिक स्रोत:
https://cdn.kernel.org/pub/linux/kernel/v7.x/linux-7.1.3.tar.xz
डाउनलोड:
wget https://cdn.kernel.org/pub/linux/kernel/v7.x/linux-7.1.3.tar.xz
अपलोड स्थान (यदि ऑफ़लाइन हो):
/root/linux-7.1.3.tar.xz
dnf groupinstall "Development Tools" -y
dnf install -y \
ncurses-devel \
elfutils-libelf-devel \
openssl-devel \
bc \
bison \
flex \
perl \
dwarves \
tar \
xz
कंपाइलर सत्यापित करें:
gcc --version
mkdir -p /usr/src
cd /usr/src
tar -xf /root/linux-7.1.3.tar.xz
cd linux-7.1.3
ls Makefile # दिखना चाहिए: Makefile
# वर्तमान कर्नेल कॉन्फ़िगरेशन कॉपी करें
cp /boot/config-$(uname -r) .config
# नया कॉन्फ़िगरेशन जनरेट करें
make olddefconfig
# KVM कॉन्फ़िगरेशन सत्यापित करें
grep -E "CONFIG_KVM|CONFIG_KVM_INTEL" .config
अपेक्षित आउटपुट:
CONFIG_KVM=m
CONFIG_KVM_X86=m
CONFIG_KVM_INTEL=m
# CPU थ्रेड्स जांचें
nproc
# संकलित करें (सभी उपलब्ध कोर का उपयोग करें)
make -j$(nproc)
# कर्नेल छवि सत्यापित करें
ls -lh arch/x86/boot/bzImage
नोट: संकलन समय CPU और स्टोरेज प्रदर्शन पर निर्भर करता है।
# मॉड्यूल स्थापित करें
make modules_install
# स्थापना सत्यापित करें
ls /lib/modules/
# KVM मॉड्यूल जांचें
find /lib/modules/7.1.3 -name "kvm*.ko*"
अपेक्षित आउटपुट:
kvm.ko
kvm-intel.ko
kvm-amd.ko
# कर्नेल स्थापित करें
make install
# स्थापना सत्यापित करें
ls -lh /boot | grep 7.1.3
अपेक्षित आउटपुट:
vmlinuz-7.1.3
initramfs-7.1.3.img
System.map-7.1.3
# GRUB कॉन्फ़िगरेशन जनरेट करें
grub2-mkconfig -o /boot/grub2/grub.cfg
# डिफ़ॉल्ट कर्नेल सेट करें
grubby --set-default /boot/vmlinuz-7.1.3
# डिफ़ॉल्ट कर्नेल सत्यापित करें
grubby --default-kernel
अपेक्षित आउटपुट:
/boot/vmlinuz-7.1.3
reboot
कर्नेल संस्करण जांचें:
uname -r
# अपेक्षित: 7.1.3
KVM मॉड्यूल जांचें:
lsmod | grep kvm
# अपेक्षित: kvm_intel, kvm, irqbypass
KVM मॉड्यूल स्थान सत्यापित करें:
modinfo kvm_intel | grep filename
# अपेक्षित: /lib/modules/7.1.3/kernel/arch/x86/kvm/kvm-intel.ko
महत्वपूर्ण: पुराने कर्नेल को तुरंत नहीं हटाना चाहिए।
उपलब्ध कर्नेल सूचीबद्ध करें:
grubby --info=ALL | grep kernel
यदि नए कर्नेल में समस्या हो, तो पुराना कर्नेल सेट करें:
grubby --set-default /boot/vmlinuz-6.18.8-1.el8.elrepo.x86_64
reboot
| आइटम | पहले | बाद में |
|---|---|---|
| कर्नेल संस्करण | 6.18.8-1.el8.elrepo.x86_64 | 7.1.3 |
| KVM स्थिति | N/A | सक्षम |
| CVE-2026-53359 | असुरक्षित | सुधारा गया |