
Shell-скрипт, который собирает пропатченные .deb-пакеты ядра Ubuntu, содержащие исправление kfree_rcu из upstream для use-after-free в IPv4 CVE-2026-98432.
build-patched-kernel.sh собирает пакеты ядра Ubuntu .deb, которые включают
исправление из upstream для CVE-2026-98432:
e3f33b0a1d89 "ipv4: free inet_opt and ireq_opt after an RCU grace period"
Ошибка — это use-after-free в ip_options_build(). Один CPU всё ещё может
отправлять SYNACK, пока другой освобождает опции IPv4 TCP-сокета. Исправление
заменяет два вызова kfree() на kfree_rcu() в net/ipv4/af_inet.c и
net/ipv4/tcp_ipv4.c.
uname -r, если аргумент не
указан (например, 6.8.0-45-generic).deb-src и устанавливает компилятор и инструменты
сборки.apt-get source. Если в архиве больше нет этой версии, он
переключается на pull-lp-source из Launchpad. Затем устанавливает
зависимости сборки.kfree_rcu() не принимает NULL, он добавляет
проверку на NULL.+cve202698432.1 к версии пакета, чтобы новые пакеты
обновляли пакеты из архива с тем же ABI.debian/rules Ubuntu и копирует файлы .deb в
./debs-<version>/.Повторный запуск скрипта использует уже скачанные исходники и не патчит их дважды.
На самой машине с Ubuntu (запускать от root или через sudo):
./build-patched-kernel.sh # kernel from uname -r
./build-patched-kernel.sh 6.8.0-45-generic # a specific kernel
В Docker используйте выпуск Ubuntu, соответствующий ядру (noble для 6.8,
jammy для 5.15). Указывайте версию явно, потому что uname -r внутри
контейнера показывает ядро хоста:
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 держит исходники ядра внутри контейнера. Это нужно, когда
смонтированный каталог нечувствителен к регистру, как на macOS. Другие
параметры (OUTDIR, LOCAL_SUFFIX, SRC_PACKAGE/SRC_VERSION, JOBS)
описаны в начале скрипта.
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
Образ ядра неподписанный и заменяет подписанный пакет
linux-image-<version>. Если включена Secure Boot, либо подпишите образ своим
ключом MOK, либо отключите Secure Boot.