
kpatch-Livepatch für CVE-2026-98432 (und CVE-2026-99999) auf AlmaLinux und Rocky Linux 8, 9 und 10
Livepatch-Module, die CVE-2026-98432 auf einem laufenden AlmaLinux- oder Rocky-Linux-8-, -9- oder -10-Host (x86_64) ohne Neustart beheben. Auf Kernels, denen auch die Behebung für CVE-2026-99999 fehlt, behebt dasselbe Modul auch diese, sodass ein Host nur ein Modul benötigt, je nachdem, welche der beiden Behebungen seinem Kernel fehlt.
Status (2026-11-02): Jedes Modul ist gebaut und einem Ladetest unterzogen; keines ist bisher veröffentlicht, daher gibt es nichts anzuwenden. Als Nächstes folgen die Veröffentlichung und ein Test des Einzeilers an jedem veröffentlichten Modul; bis dahin enthält scripts/livepatch.sh keine Module in seiner Tabelle und lehnt jeden Kernel ab.
684 Kernel: 380 von AlmaLinux und 304 von Rocky Linux, 8.3 bis 10.2, aufgeführt in tools/kernels.tsv. Das sind alle Kernel, deren SRPM und Debuginfo auf den Mirrors der Distribution (einschließlich Vault) verfügbar sind, nur x86_64, mit Ausnahme von Rockys 5.14.0-611.41.1.el9_7, dessen Debuginfo auf keinem Mirror liegt. Enthalten ist Rockys einziger 8.3-Kernel, 4.18.0-240.22.1.el8, den das frühere Rocky-Repository nicht abdeckte, sowie die Kernel, die beide Distributionen nach den früheren Repositories veröffentlichten, bis hin zu 4.18.0-553.180.1.el8_10 (AlmaLinux), 5.14.0-687.61.1.el9_8 und 6.12.0-211.69.1.el10_2. AlmaLinux 10s x86_64_v2-Variante ist nicht abgedeckt.
666 der 684 fehlt auch die Behebung für CVE-2026-99999, und ihr Modul enthält beide. Die anderen 18 haben sie bereits (ab AlmaLinux 4.18.0-553.177.1.el8_10 und Rocky 553.178.1.el8_10 sowie ab 5.14.0-687.59.1.el9_8 und 6.12.0-211.67.1.el10_2 auf beiden), und ihr Modul enthält allein die Änderung für CVE-2026-98432.
Jedes Modul wurde in der CI gebaut und mit scripts/livepatch.sh auf seinen ausgelieferten Kernel in einer VM angewendet (tools/loadtest.sh), am 2026-10-31, ein Lauf pro Distribution und Minor-Version, 40 Läufe; alle 684 gaben RESULT: PASS aus. In jedem:
inet_sock_destruct und tcp_v4_reqsk_destructor sind als gepatchte Funktionen von vmlinux aufgeführt.tools/tcpopt.py). Dies treibt beide Freigaben an, die die Behebung ändert, während die Optionen vorhanden sind; ohne IP-Optionen geben sie nur NULL frei.nfnetlink_queue und xt_CHECKSUM (und auf 9 und 10 auf nf_conntrack_bridge). Auf 8 und 9 (511 Kernel sowie Rockys 8.3) wurde ein präparierter Frame vom ausgelieferten Kernel fragmentiert und mit angewendetem Modul verworfen. Auf 10 (154 Kernel) wird der Frame abgelehnt, bevor er die Schwachstelle erreicht, sodass diese Probe dort keine Aussage trifft.Nicht getestet: die Race-Bedingung selbst. Um CVE-2026-98432 auf dem ausgelieferten Kernel und seine Abwesenheit mit dem Modul nachzuweisen, bedarf es KASAN und einer konstruierten Verschränkung eines erneut übertragenen SYN mit der Freigabe des Kindes; das geschieht in diesen VMs nicht auf Abruf. Ebenso wurde kein Modul mit aktiviertem Secure Boot getestet (es ist unsigniert und würde abgelehnt), noch beim Booten durch kpatch.service geladen.
tools/mkdiffs.sh portiert jedes Kernel-SRPM einer Minor-Version. Zuerst wendet es die eigenen Patches des SRPM auf dessen Tarball an, wie es %prep tut (tools/prep.py): AlmaLinux bringt auf diese Weise eigene Behebungen mit, darunter die für CVE-2026-99999 in 4.18.0-553.177.1.el8_10, und 10.2s 6.12.0-211.69.1 ist Red Hats 211.56.1-Tarball plus 466 Patches, sodass eine gegen den reinen Tarball erstellte Portierung verfehlen würde, was der Kernel enthält. Die geänderten Zeilen werden dann gegen tools/ref/ geprüft: Die von CVE-2026-98432 müssen mit denen von Upstream übereinstimmen, die von CVE-2026-99999 mit AlmaLinuxs Patch für 8 oder 9 oder mit Upstreams für 10, oder dort fehlen, wo der Kernel diese Behebung enthält. Alle 684 stimmten überein. tools/port.py bricht außerdem ab, wenn das kfree_rcu() des Baums keinen NULL-Zeiger überspringen würde, wie es bei beiden Zeigern üblicherweise der Fall ist.
8 und 9 werden mit kpatch-build gebaut, 10 mit dem kernel-eigenen klp-build; beide bauen Replace-Patches, wodurch ein Modul die Aufgabe eines früheren übernimmt.
Der Upstream-Fix ist torvalds/linux e3f33b0a1d89, „ipv4: free inet_opt and
ireq_opt after an RCU grace period“. Wenn ein SYN IP-Optionen trägt,
behält der Listener sie am Request-Socket (ireq_opt) und übergibt sie
an das Child-Socket (inet_opt), ohne sie zu kopieren. Ein erneut
übertragenes SYN für dieselbe Anfrage kann auf einer anderen CPU mit einem
SYN-ACK beantwortet werden, wobei diese Optionen unter RCU gelesen werden,
während das Child geschlossen wird und inet_sock_destruct() sie mit einem
einfachen kfree() freigibt: ein Use-after-free. Die Migration des
Request-Sockets hat dasselbe Problem in tcp_v4_reqsk_destructor(). Der
Fix gibt beide mit kfree_rcu() frei.
Keine der beiden Distributionen hat den Fix ausgeliefert: Am 2026-10-27
nannten die neuesten Kernel von AlmaLinux und Rocky Linux 8, 9 und 10 die
CVE nicht in ihren Changelogs, und die Quellen von 4.18.0-305.3.1.el8_4,
4.18.0-553.179.1.el8_10, 5.14.0-687.61.1.el9_8 und 6.12.0-211.68.1.el10_2
geben beide Zeiger weiterhin mit kfree() frei.
Früher behoben, separat für jede Distribution, durch nsrg-fmlorg/kpatch-alma-cve-2026-99999 und nsrg-fmlorg/kpatch-rocky-cve-2026-99999. Beide Distributionen liefern inzwischen Kernel mit diesem Fix aus, ab 4.18.0-553.177.1.el8_10 (AlmaLinux) bzw. 553.178.1.el8_10 (Rocky), 5.14.0-687.59.1.el9_8 und 6.12.0-211.67.1.el10_2. Wo einem Kernel dieser fehlt, trägt das Modul dieses Repositories dieselbe Änderung wie die früheren, und ersetzt ein bereits geladenes früheres Modul (getestet auf jedem der 665 Kernel, die eines hatten, siehe oben).