
Shell-Skript, das gepatchte Ubuntu-Kernel-.deb-Pakete erstellt, die den Upstream-kfree_rcu-Fix für die IPv4-Use-after-free-Schwachstelle CVE-2026-98432 enthalten.
build-patched-kernel.sh baut Ubuntu-Kernel-.deb-Pakete, die den
Upstream-Fix für CVE-2026-98432 enthalten:
e3f33b0a1d89 "ipv4: free inet_opt and ireq_opt after an RCU grace period"
Der Fehler ist eine Use-after-free in ip_options_build(). Eine CPU kann noch
ein SYNACK senden, während eine andere die IPv4-Optionen eines TCP-Sockets
freigibt. Der Fix ersetzt zwei kfree()-Aufrufe durch kfree_rcu(), in
net/ipv4/af_inet.c und net/ipv4/tcp_ipv4.c.
uname -r,
falls keines angegeben ist (z. B. 6.8.0-45-generic).deb-src-Repositories und installiert Compiler und Build-Tools.apt-get source das Ubuntu-Quellpaket herunter, das diesen Kernel
gebaut hat. Ist diese Version nicht mehr im Archiv vorhanden, wird auf
pull-lp-source von Launchpad zurückgegriffen. Anschließend werden die
Build-Abhängigkeiten installiert.kfree_rcu() kein NULL akzeptiert, wird eine NULL-Prüfung ergänzt.+cve202698432.1 an die Paketversion an, sodass die neuen Pakete die
Archivpakete mit derselben ABI aktualisieren.debian/rules und kopiert die .deb-Dateien nach
./debs-<version>/.Ein erneutes Ausführen des Skripts verwendet die heruntergeladenen Quellen wieder und patcht sie nicht zweimal.
Auf der Ubuntu-Maschine selbst (als root oder mit sudo ausführen):
./build-patched-kernel.sh # kernel from uname -r
./build-patched-kernel.sh 6.8.0-45-generic # a specific kernel
In Docker die Ubuntu-Version verwenden, die zum Kernel passt (noble für 6.8,
jammy für 5.15). Die Version explizit angeben, weil uname -r innerhalb eines
Containers den Kernel des Hosts anzeigt:
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 hält die Kernel-Quellen innerhalb des Containers. Das ist
nötig, wenn das eingebundene Verzeichnis die Groß-/Kleinschreibung nicht
unterscheidet, wie unter macOS. Weitere Einstellungen (OUTDIR,
LOCAL_SUFFIX, SRC_PACKAGE/SRC_VERSION, JOBS) sind am Anfang des
Skripts beschrieben.
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
Das Kernel-Image ist unsigniert und ersetzt das signierte Paket
linux-image-<version>. Wenn Secure Boot aktiviert ist, entweder das Image mit
einem eigenen MOK-Schlüssel signieren oder Secure Boot deaktivieren.