
Script shell que compila pacotes .deb do kernel Ubuntu corrigidos, contendo a correção upstream kfree_rcu para a vulnerabilidade use-after-free de IPv4 CVE-2026-98432.
build-patched-kernel.sh compila pacotes .deb do kernel Ubuntu que incluem a
correção upstream para CVE-2026-98432:
e3f33b0a1d89 "ipv4: free inet_opt and ireq_opt after an RCU grace period"
O bug é um use-after-free em ip_options_build(). Uma CPU ainda pode estar
enviando um SYNACK enquanto outra libera as opções IPv4 de um socket TCP. A
correção substitui duas chamadas kfree() por kfree_rcu(), em
net/ipv4/af_inet.c e net/ipv4/tcp_ipv4.c.
uname -r se
nenhum for fornecido (por exemplo, 6.8.0-45-generic).deb-src e instala o compilador e as ferramentas de
compilação.apt-get source. Se o repositório não tiver mais essa versão, recorre ao
pull-lp-source do Launchpad. Em seguida, instala as dependências de
compilação.kfree_rcu() não aceita NULL, adiciona
uma verificação de NULL.+cve202698432.1 à versão do pacote, para que os novos pacotes
atualizem os pacotes do repositório com a mesma ABI.debian/rules do Ubuntu e copia os arquivos .deb para
./debs-<version>/.Executar o script novamente reutiliza os fontes baixados e não os corrige duas vezes.
Na própria máquina Ubuntu (execute como root ou com sudo):
./build-patched-kernel.sh # kernel from uname -r
./build-patched-kernel.sh 6.8.0-45-generic # a specific kernel
No Docker, use a versão do Ubuntu que corresponde ao kernel (noble para 6.8,
jammy para 5.15). Passe a versão explicitamente, porque uname -r dentro de um
contêiner mostra o kernel do 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 mantém os fontes do kernel dentro do contêiner. Você precisa
disso quando o diretório montado não diferencia maiúsculas de minúsculas, como
no macOS. Outras configurações (OUTDIR, LOCAL_SUFFIX, SRC_PACKAGE/SRC_VERSION, JOBS) são descritas
no início do 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
A imagem do kernel é não assinada e substitui o pacote assinado linux-image-<version>.
Se o Secure Boot estiver ativado, assine a imagem com sua própria chave MOK ou
desative o Secure Boot.