
kpatch livepatch per CVE-2026-98432 (e CVE-2026-99999) su AlmaLinux e Rocky Linux 8, 9 e 10
Moduli livepatch che correggono CVE-2026-98432 su un host AlmaLinux o Rocky Linux 8, 9 o 10 (x86_64) in esecuzione, senza riavvio. Sui kernel che mancano anche della correzione per CVE-2026-99999, lo stesso modulo corregge anche quella, quindi un host necessita di un solo modulo, indipendentemente da quale delle due manchi al suo kernel.
Stato (2026-11-02): ogni modulo è compilato e sottoposto a test di
caricamento; nessuno è ancora rilasciato, quindi non c'è nulla da applicare.
Il rilascio, e un test del comando da una riga su ciascun modulo rilasciato,
verranno in seguito; fino ad allora scripts/livepatch.sh non ha moduli nella
sua tabella e rifiuta ogni kernel.
684 kernel: 380 di AlmaLinux e 304 di Rocky Linux, da 8.3 a 10.2,
elencati in tools/kernels.tsv. Si tratta di ogni kernel il cui SRPM e
debuginfo sono presenti sui mirror della distribuzione (vault incluso), solo
x86_64, tranne il 5.14.0-611.41.1.el9_7 di Rocky, il cui debuginfo non è su
alcun mirror. Include l'unico kernel 8.3 di Rocky, 4.18.0-240.22.1.el8, che
il precedente repository Rocky non copriva, e i kernel che entrambe le
distribuzioni hanno rilasciato dopo i precedenti repository, fino a
4.18.0-553.180.1.el8_10 (AlmaLinux), 5.14.0-687.61.1.el9_8 e
6.12.0-211.69.1.el10_2. La variante x86_64_v2 di AlmaLinux 10 non è coperta.
666 dei 684 mancano anche della correzione per CVE-2026-99999, e il loro modulo le porta entrambe. Gli altri 18 la possiedono già (da AlmaLinux 4.18.0-553.177.1.el8_10 e Rocky 553.178.1.el8_10, e da 5.14.0-687.59.1.el9_8 e 6.12.0-211.67.1.el10_2 su entrambe), e il loro modulo porta solo la modifica di CVE-2026-98432.
Ogni modulo è stato compilato in CI e applicato con scripts/livepatch.sh al
kernel di distribuzione in una VM (tools/loadtest.sh), il 2026-10-31, una
esecuzione per distribuzione e minor, 40 esecuzioni; tutti i 684 hanno
stampato RESULT: PASS. In ciascuna:
inet_sock_destruct e tcp_v4_reqsk_destructor sono elencate come
funzioni corrette di vmlinux.tools/tcpopt.py). Questo
esercita entrambe le liberazioni che la correzione modifica con le opzioni
presenti; senza opzioni IP liberano solo NULL.nfnetlink_queue e xt_CHECKSUM (e su 9 e 10
nf_conntrack_bridge). Su 8 e 9 (511 kernel, e il 8.3 di Rocky) un frame
appositamente costruito è stato frammentato dal kernel di distribuzione e
scartato con il modulo applicato. Su 10 (154 kernel) il frame viene
rifiutato prima di raggiungere la falla, quindi quella prova non dice nulla
in un senso o nell'altro.Non testato: la race stessa. Dimostrare CVE-2026-98432 sul kernel di
distribuzione e la sua assenza con il modulo richiede KASAN e un intreccio
artificioso di un SYN ritrasmesso con il rilascio del figlio; non accade su
richiesta in queste VM. Né alcun modulo è stato testato con Secure Boot
attivo (non è firmato e verrebbe rifiutato), o caricato all'avvio da
kpatch.service.
tools/mkdiffs.sh esegue il port di ogni SRPM di un minor. Applica prima le
patch proprie dell'SRPM al suo tarball, come fa %prep
(tools/prep.py): AlmaLinux porta così le proprie correzioni, tra cui quella
di CVE-2026-99999 in 4.18.0-553.177.1.el8_10, e il 6.12.0-211.69.1 di 10.2
è il tarball 211.56.1 di Red Hat più 466 patch, quindi un port realizzato
contro il tarball nudo mancherebbe ciò che il kernel ha. Le righe modificate
vengono poi confrontate con tools/ref/: quelle di CVE-2026-98432 devono
essere uguali a quelle upstream, quelle di CVE-2026-99999 alla patch di
AlmaLinux per 8 o 9 o a quella upstream per 10, oppure assenti dove il kernel
ha quella correzione. Tutti i 684 hanno corrisposto. tools/port.py si ferma
anche se il kfree_rcu() dell'albero non salterebbe un puntatore NULL, come
di solito sono entrambi i puntatori.
8 e 9 sono costruiti con kpatch-build, 10 con il klp-build del kernel; entrambi costruiscono patch di sostituzione, che è il modo in cui un modulo prende il posto di uno precedente.
La correzione upstream è torvalds/linux e3f33b0a1d89, "ipv4: free inet_opt and
ireq_opt after an RCU grace period". Quando un SYN trasporta opzioni IP, il
listener le conserva sul request socket (ireq_opt) e le passa al
socket figlio (inet_opt) senza copiarle. Un SYN ritrasmesso per la
stessa richiesta può ricevere una risposta con un SYN-ACK su un'altra CPU, leggendo quelle
opzioni sotto RCU, mentre il figlio viene chiuso e inet_sock_destruct()
le libera con un semplice kfree(): un use after free. La migrazione del
request socket ha lo stesso problema in tcp_v4_reqsk_destructor(). La correzione
libera entrambi con kfree_rcu().
Nessuna delle due distribuzioni ha distribuito la correzione: il 2026-10-27 i kernel
più recenti di AlmaLinux e Rocky Linux 8, 9 e 10 non nominavano la CVE nei
loro changelog, e i sorgenti di 4.18.0-305.3.1.el8_4,
4.18.0-553.179.1.el8_10, 5.14.0-687.61.1.el9_8 e 6.12.0-211.68.1.el10_2
liberano ancora entrambi i puntatori con kfree().
Corretta in precedenza, separatamente per ciascuna distribuzione, da nsrg-fmlorg/kpatch-alma-cve-2026-99999 e nsrg-fmlorg/kpatch-rocky-cve-2026-99999. Entrambe le distribuzioni ora distribuiscono kernel con quella correzione, a partire da 4.18.0-553.177.1.el8_10 (AlmaLinux) o 553.178.1.el8_10 (Rocky), 5.14.0-687.59.1.el9_8 e 6.12.0-211.67.1.el10_2 in poi. Dove un kernel ne è privo, il modulo di questo repository porta la stessa modifica dei precedenti, e sostituisce un modulo già caricato (testato su ciascuno dei 665 kernel che ne avevano uno, sopra).