
Script shell che compila pacchetti .deb del kernel Ubuntu con patch contenenti la correzione upstream kfree_rcu per la vulnerabilità use-after-free IPv4 CVE-2026-98432.
build-patched-kernel.sh compila i pacchetti .deb del kernel Ubuntu che includono
la correzione upstream per CVE-2026-98432:
e3f33b0a1d89 "ipv4: free inet_opt and ireq_opt after an RCU grace period"
Il bug è un use-after-free in ip_options_build(). Una CPU può ancora stare
inviando un SYNACK mentre un'altra libera le opzioni IPv4 di un socket TCP. La correzione
sostituisce due chiamate kfree() con kfree_rcu(), in net/ipv4/af_inet.c e
net/ipv4/tcp_ipv4.c.
uname -r se non
ne viene fornita nessuna (ad es. 6.8.0-45-generic).deb-src e installa il compilatore e gli strumenti di build.apt-get source. Se l'archivio non ha più quella versione, ripiega
su pull-lp-source da Launchpad. Poi installa le dipendenze di build.kfree_rcu() non accetta NULL, aggiunge
un controllo NULL.+cve202698432.1 alla versione del pacchetto, così i nuovi pacchetti
aggiornano i pacchetti dell'archivio con lo stesso ABI.debian/rules di Ubuntu e copia i file .deb in
./debs-<version>/.Eseguire di nuovo lo script riutilizza i sorgenti scaricati e non li applica due volte.
Sulla macchina Ubuntu stessa (eseguire come root o con sudo):
./build-patched-kernel.sh # kernel from uname -r
./build-patched-kernel.sh 6.8.0-45-generic # a specific kernel
In Docker, usare la release Ubuntu che corrisponde al kernel (noble per 6.8,
jammy per 5.15). Passare la versione esplicitamente, perché uname -r all'interno di un
container mostra il kernel dell'host:
docker run --rm -v "$PWD":/work -w /work -e WORKDIR=/build ubuntu:24.04 \
./build-patched-kernel.sh 6.8.0-45-generic
WORKDIR=/build mantiene i sorgenti del kernel all'interno del container. Serve
quando la directory montata non distingue maiuscole e minuscole, come su macOS. Altre impostazioni
(OUTDIR, LOCAL_SUFFIX, SRC_PACKAGE/SRC_VERSION, JOBS) sono descritte
all'inizio dello script.
sudo apt install ./debs-<version>/linux-image-unsigned-<version>_*.deb \
./debs-<version>/linux-modules-<version>_*.deb \
./debs-<version>/linux-modules-extra-<version>_*.deb \
./debs-<version>/linux-headers-*.deb
sudo reboot
L'immagine del kernel è non firmata e sostituisce il pacchetto firmato linux-image-<version>.
Se Secure Boot è attivo, firmare l'immagine con la propria chiave MOK oppure
disattivare Secure Boot.