
kpatch livepatch لـ CVE-2026-98432 (و CVE-2026-99999) على AlmaLinux وRocky Linux 8 و9 و10
وحدات livepatch التي تُصلح CVE-2026-98432 على مضيف AlmaLinux أو Rocky Linux 8 أو 9 أو 10 قيد التشغيل (x86_64) دون إعادة تشغيل. على الأنوية التي تفتقر أيضًا إلى الإصلاح الخاص بـ CVE-2026-99999، تُصلح الوحدة نفسها ذلك أيضًا، لذا يحتاج المضيف إلى وحدة واحدة أيًّا كان الإصلاح الذي يفتقده نواته من الاثنين.
الحالة (2026-11-02): كل وحدة مبنية ومُختبرة التحميل؛ لم تُصدر أي منها بعد، لذا لا يوجد شيء لتطبيقه. يأتي الإصدار التالي، واختبار الأمر أحادي السطر على كل وحدة مُصدرة؛ حتى ذلك الحين لا يحتوي scripts/livepatch.sh على أي وحدات في جدوله ويرفض كل نواة.
684 نواة: 380 من AlmaLinux و304 من Rocky Linux، من 8.3 إلى 10.2، مُدرجة في tools/kernels.tsv. وهي كل نواة تتوفر حزمة SRPM الخاصة بها ومعلومات التصحيح (debuginfo) على مرايا التوزيعة (بما في ذلك vault)، x86_64 فقط، باستثناء نواة Rocky 5.14.0-611.41.1.el9_7 التي لا توجد معلومات تصحيحها على أي مرآة. وتشمل نواة Rocky الوحيدة من 8.3، 4.18.0-240.22.1.el8، التي لم يغطها مستودع Rocky السابق، والأنوية التي أصدرها كلا التوزيعين بعد المستودعات السابقة، حتى 4.18.0-553.180.1.el8_10 (AlmaLinux)، و5.14.0-687.61.1.el9_8 و6.12.0-211.69.1.el10_2. لا يُغطى متغيّر x86_64_v2 الخاص بـ AlmaLinux 10.
666 من أصل 684 تفتقر أيضًا إلى الإصلاح الخاص بـ CVE-2026-99999، ووحدتها تحمل كليهما. أما الـ 18 الأخرى فتمتلكه بالفعل (من AlmaLinux 4.18.0-553.177.1.el8_10 وRocky 553.178.1.el8_10، ومن 5.14.0-687.59.1.el9_8 و6.12.0-211.67.1.el10_2 على كليهما)، ووحدتها تحمل تغيير CVE-2026-98432 وحده.
بُنيت كل وحدة في CI وطُبّقت باستخدام scripts/livepatch.sh على نواتها المُصدَرة في جهاز ظاهري (tools/loadtest.sh)، في 2026-10-31، بتشغيل واحد لكل توزيعة وإصدار فرعي، أي 40 تشغيلًا؛ وطبع جميع الـ 684 RESULT: PASS. في كل منها:
inet_sock_destruct وtcp_v4_reqsk_destructor مُدرجتان كدالتين مُرقّعتين في vmlinux.tools/tcpopt.py). وهذا يُشغّل كلا التحريرين اللذين يغيّرهما الإصلاح مع وجود الخيارات؛ وبدون خيارات IP لا يُحرّران سوى NULL.nfnetlink_queue وxt_CHECKSUM (وعلى 9 و10 على nf_conntrack_bridge). على 8 و9 (511 نواة، ونواة Rocky من 8.3) جرى تجزئة إطار مُصمَّم بواسطة النواة المُصدَرة وأُسقط مع تطبيق الوحدة. على 10 (154 نواة) يُرفض الإطار قبل أن يصل إلى الخلل، لذا لا يقول ذلك الفحص شيئًا في أي من الاتجاهين هناك.لم يُختبر: حالة التسابق (race) نفسها. يتطلب إظهار CVE-2026-98432 على النواة المُصدَرة وغيابه مع الوحدة وجود KASAN وتداخل مُصطنع بين SYN مُعاد إرساله وإطلاق العملية الابنة؛ وهو لا يحدث عند الطلب في هذه الأجهزة الظاهرية. ولم تُختبر أي وحدة مع تفعيل Secure Boot (فهي غير موقّعة وستُرفض)، أو تُحمّل عند الإقلاع بواسطة kpatch.service.
ينقل tools/mkdiffs.sh كل حزمة SRPM لنواة في إصدار فرعي. يطبّق أولًا ترقيعات حزمة SRPM الخاصة بها على أرشيفها المضغوط، كما يفعل %prep (tools/prep.py): تحمل AlmaLinux إصلاحاتها الخاصة بهذه الطريقة، ومن بينها إصلاح CVE-2026-99999 في 4.18.0-553.177.1.el8_10، ونواة 10.2 6.12.0-211.69.1 هي أرشيف Red Hat المضغوط 211.56.1 زائد 466 ترقيعًا، لذا فإن منفذًا صُنع مقابل الأرشيف المضغوط المجرّد سيفوته ما تحتويه النواة. ثم تُفحص الأسطر المتغيّرة مقابل tools/ref/: يجب أن تتطابق أسطر CVE-2026-98432 مع أسطر upstream، وأسطر CVE-2026-99999 مع ترقيع AlmaLinux لـ 8 أو 9 أو ترقيع upstream لـ 10، أو تكون غائبة حيث تمتلك النواة ذلك الإصلاح. وقد تطابقت كل واحدة من الـ 684. كما يتوقف tools/port.py إذا كانت kfree_rcu() في الشجرة لن تتخطى مؤشر NULL، كما هو الحال عادةً في كلا المؤشرين.
و9 و10 مبنيان باستخدام kpatch-build، و10 باستخدام klp-build الخاص بالنواة؛ وكلاهما يبني رقع استبدال، وهي الطريقة التي يتولى بها وحدة نمطية المسؤولية من وحدة سابقة.
الإصلاح في المستودع الأصلي هو torvalds/linux e3f33b0a1d89، "ipv4: free inet_opt and ireq_opt after an RCU grace period". عندما تحمل حزمة SYN خيارات IP، يحتفظ المستمع بها على مقبس الطلب (ireq_opt) ويسلّمها إلى المقبس الابن (inet_opt) دون نسخ. يمكن الرد على حزمة SYN المعاد إرسالها للطلب نفسه بحزمة SYN-ACK على وحدة معالجة مركزية أخرى، مع قراءة تلك الخيارات تحت RCU، بينما يُغلق الابن ويحرّر inet_sock_destruct() تلك الخيارات باستخدام kfree() عادي: استخدام بعد التحرير. ترحيل مقبس الطلب يعاني من المشكلة نفسها في tcp_v4_reqsk_destructor(). الإصلاح يحرّر كليهما باستخدام kfree_rcu().
لم تُصدر أي من التوزيعتين الإصلاح: في 2026-10-27 لم تذكر أحدث أنوية AlmaLinux وRocky Linux 8 و9 و10 ثغرة CVE في سجلات التغييرات الخاصة بها، ولا تزال مصادر 4.18.0-305.3.1.el8_4 و4.18.0-553.179.1.el8_10 و5.14.0-687.61.1.el9_8 و6.12.0-211.68.1.el10_2 تحرّر كلا المؤشرين باستخدام kfree().
أُصلحت سابقًا، بشكل منفصل لكل توزيعة، بواسطة nsrg-fmlorg/kpatch-alma-cve-2026-99999 و nsrg-fmlorg/kpatch-rocky-cve-2026-99999. تُصدر كلتا التوزيعتين الآن أنوية تتضمن ذلك الإصلاح، ابتداءً من 4.18.0-553.177.1.el8_10 (AlmaLinux) أو 553.178.1.el8_10 (Rocky)، و5.14.0-687.59.1.el9_8 و6.12.0-211.67.1.el10_2 فما فوق. حيث تفتقر نواة إليه، تحمل الوحدة النمطية في هذا المستودع التغيير نفسه كالوحدات السابقة، وتستبدل وحدة سابقة محمّلة بالفعل (تم اختبارها على كل من الأنوية الـ665 التي كانت لديها واحدة، أعلاه).
| المسار | ما هو |
|---|---|
build.sh | يبني الوحدة النمطية لنواة واحدة داخل حاوية التوزيعة |
tools/kernels.tsv | الأنوية التي تبنيها CI: التوزيعة، الإصدار الفرعي، إصدار النواة |
tools/select-kernels.py | أي منها تختاره جولة CI |
tools/mkdiffs.sh | ينشئ النقل لكل نواة في إصدار فرعي ويتحقق منه مقابل tools/ref/ |
tools/prep.py | يطبّق رقع SRPM الخاصة به على أرشيفه المضغوط، كما يفعل %prep، قبل النقل |
tools/port.py | التغيير نفسه، مطبّقًا على شجرة نواة |
tools/kpatchify.py | يحوّل النقل إلى الشكل المُغذّى إلى kpatch-build |
tools/klp-overlay.sh، tools/klp-overlay-lds.py، tools/klp-overlay/ | يعير klp-build الخاص بـ10.2 إلى 10.0 و10.1 |
tools/klpsymcheck.py | يتحقق من رموز وحدة klp-build مقابل النواة المُصدَّرة |
tools/loadtest.sh، tools/loadtest-guest.sh، tools/loadtest-bootprep.sh، tools/loadtest-bootinfo.sh | يُقلع النواة المُصدَّرة في آلة افتراضية ويطبّق الوحدة النمطية ويتحقق منها ويزيلها |
tools/csum-probe.sh، tools/csum-inject.py | يستقصي CVE-2026-99999 قبل وبعد |
tools/tcpopt.py | يقود عمليتي التحرير اللتين يغيّرهما CVE-2026-98432، مع وجود خيارات IP |
tools/doccheck.py | يفشل عندما لا يُذكر ملف في كلا ملفي README، أو يكون رابط مكسورًا |
scripts/livepatch.sh | يطبّق وحدة نمطية مُصدَّرة ويتحقق منها ويزيلها على مضيف |
scripts/build-local.sh | يبني ويختبر تحميل الوحدة النمطية لنواة واحدة على جهازك |
.github/workflows/diffs.yml | يشغّل tools/mkdiffs.sh لكل إصدار فرعي من كلتا التوزيعتين |
.github/workflows/build.yml | يبني الوحدات النمطية ويختبر تحميلها |
.github/workflows/docs.yml | يشغّل tools/doccheck.py |