Atualize o kernel-rt do Rocky Linux 8 para corrigir 8 CVEs críticas (use-after-free, LPE) e evitar panics no scheduler DEADLINE. Preserve isolcpus, nohz_full e valide a latência pós-reboot.
Em 22 de junho de 2026, a RockyLinux Enterprise Software Foundation publicou o RLSA-2026:27354, uma atualização de segurança Important para o pacote kernel-rt do Rocky Linux 8.
Este advisory aborda oito vulnerabilidades no kernel Linux de tempo real, incluindo condições de use-after-free, race conditions e vulnerabilidades de corrupção de memória que podem levar a negação de serviço, elevação de privilégios locais e, em alguns casos, execução remota de código
O kernel-rt (Real-Time Kernel) é uma variante do kernel Linux com patches de preemptibilidade total, projetada para sistemas que exigem determinismo extremo e latência previsível — ambientes como telecomunicações, automação industrial, trading de alta frequência e processamento de sinais.
A criticidade desta atualização não está apenas nas CVEs corrigidas, mas no fato de que sistemas de tempo real são particularmente sensíveis a interrupções e comportamentos não determinísticos — exatamente o tipo de problema que estas vulnerabilidades podem causar.
Este guia aborda o processo completo de atualização do kernel-rt com foco em automação, validação pós-atualização, monitoramento de latência e recuperação de emergência. Não discutiremos detalhes de cada CVE — o foco é a execução operacional da atualização em ambientes de produção.
Pré-requisitos
⚠️ Armadilha comum: administradores iniciantes esquecem de verificar o espaço em /boot antes de atualizar o kernel. O kernel-rt pode ocupar mais espaço que o kernel padrão devido aos símbolos de debug.
$ df -h /boot Filesystem Size Used Avail Use% Mounted on /dev/sda1 976M 420M 556M 44% /boot
Passo a Passo
1. Inventário e Estado Atual
$ uname -a Linux rt-node-01 4.18.0-553.rt7.342.el8.x86_64 #1 SMP PREEMPT_RT ... x86_64 x86_64 x86_64 GNU/Linux $ rpm -qa | grep kernel-rt | sort kernel-rt-4.18.0-553.rt7.342.el8.x86_64 kernel-rt-core-4.18.0-553.rt7.342.el8.x86_64 kernel-rt-devel-4.18.0-553.rt7.342.el8.x86_64 kernel-rt-modules-4.18.0-553.rt7.342.el8.x86_64 kernel-rt-modules-extra-4.18.0-553.rt7.342.el8.x86_64
Registre também os módulos carregados e parâmetros de boot atuais:
$ lsmod | head -20 $ cat /proc/cmdline BOOT_IMAGE=/vmlinuz-4.18.0-553.rt7.342.el8.x86_64 root=/dev/mapper/rl-root ro crashkernel=auto rhgb quiet skew_tick=1 rcu_nocbs=0-15 isolcpus=2-15 nohz_full=2-15
2. Sincronização dos Repositórios
O Rocky Linux 8 utiliza repositórios base e updates. Certifique-se de que os repositórios estão sincronizados:
Verifique se a atualização kernel-rt está disponível:
$ sudo dnf check-update kernel-rt Last metadata expiration check: 0:01:23 ago kernel-rt.x86_64 4.18.0-553.rt7.349.el8 rocky-updates
Antes de executar a atualização, considere usar um maintenance window com janela de rollback. Para ambientes de tempo real, recomendo a abordagem staged:
# Opção 1: Atualização direta (recomendado para testes) $ sudo dnf update -y kernel-rt # Opção 2: Download sem instalação (para validação prévia) $ sudo dnf download kernel-rt --destdir=/tmp/kernel-rt-update $ rpm -qip /tmp/kernel-rt-update/kernel-rt-*.rpm | head -20
Saída esperada da atualização:
================================================================================ Package Arch Version Repository Size ================================================================================ Installing: kernel-rt x86_64 4.18.0-553.rt7.349.el8 rocky-updates 45 M kernel-rt-core x86_64 4.18.0-553.rt7.349.el8 rocky-updates 38 M kernel-rt-devel x86_64 4.18.0-553.rt7.349.el8 rocky-updates 12 M kernel-rt-modules x86_64 4.18.0-553.rt7.349.el8 rocky-updates 28 M kernel-rt-modules-extra x86_64 4.18.0-553.rt7.349.el8 rocky-updates 2.1 M Transaction Summary ================================================================================ Install 5 Packages Total download size: 125 M Installed size: 312 M
⚠️ Armadilha comum: Usar o dnf update -y sem revisar a lista de dependências pode instalar pacotes indesejados ou remover o kernel atual se a política de installonly_limit estiver mal configurada.
# Verifique quantos kernels são mantidos $ grep installonly_limit /etc/dnf/dnf.conf installonly_limit=3
4. Verificação Pós-Instalação
Após a instalação, confirme que os novos arquivos do kernel estão presentes:
$ ls -la /boot/vmlinuz-* | tail -5 -rwxr-xr-x 1 root root 8923456 Jun 22 10:15 /boot/vmlinuz-4.18.0-553.rt7.342.el8.x86_64 -rwxr-xr-x 1 root root 8951234 Jun 22 10:15 /boot/vmlinuz-4.18.0-553.rt7.349.el8.x86_64 $ sudo dracut --force /boot/initramfs-4.18.0-553.rt7.349.el8.x86_64.img 4.18.0-553.rt7.349.el8.x86_64
O comando dracut recria o initramfs — essencial para garantir que todos os drivers necessários (especialmente drivers de storage e rede) estejam incluídos. Em sistemas de tempo real com storage NVMe ou redes RDMA, não pule este passo.
5. Configuração do GRUB e Parâmetros de Boot
O kernel-rt frequentemente requer parâmetros de boot específicos. O arquivo /etc/default/grub deve conter:
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet skew_tick=1 rcu_nocbs=0-15 isolcpus=2-15 nohz_full=2-15 rcu_nocb_poll irqaffinity=0-1"
Para aplicar ao novo kernel:
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg Generating grub configuration file ... Found linux image: /boot/vmlinuz-4.18.0-553.rt7.349.el8.x86_64 Found initrd image: /boot/initramfs-4.18.0-553.rt7.349.el8.x86_64.img Found linux image: /boot/vmlinuz-4.18.0-553.rt7.342.el8.x86_64 Found initrd image: /boot/initramfs-4.18.0-553.rt7.342.el8.x86_64.img done
Para sistemas UEFI (comum em servidores modernos):
$ sudo grub2-mkconfig -o /boot/efi/EFI/rocky/grub.cfg
6. Reboot e Validação
O reboot é obrigatório para que o novo kernel entre em vigor. Antes de reiniciar, agende uma verificação automática pós-boot:
# Crie um script de validação $ cat << 'EOF' > /root/validate-rt-kernel.sh #!/bin/bash echo "=== Validação pós-reboot ===" echo "Kernel: $(uname -r)" echo "PREEMPT_RT: $(grep PREEMPT_RT /proc/version)" echo "Latência (cyclictest -t1 -p99 -m -l10000):" cyclictest -t1 -p99 -m -l10000 | tail -1 echo "Erros no dmesg (últimos 50):" dmesg | grep -iE "error|fail|panic|oops|bug" | tail -10 EOF $ chmod +x /root/validate-rt-kernel.sh
Agende o reboot com janela de rollback automática (conceito atomic reboot):
# Salva o kernel atual como fallback $ sudo grub2-set-default 0 # Garante que o novo kernel é o padrão # Reboot com timeout para rollback manual $ sudo shutdown -r +5 "Reboot para atualização kernel-rt RLSA-2026:27354"
Após o reboot, conecte-se e valide:
$ uname -r 4.18.0-553.rt7.349.el8.x86_64 $ cat /proc/version Linux version 4.18.0-553.rt7.349.el8.x86_64 ... #1 SMP PREEMPT_RT ... $ sudo /root/validate-rt-kernel.sh === Validação pós-reboot === Kernel: 4.18.0-553.rt7.349.el8.x86_64 PREEMPT_RT: Linux version 4.18.0-553.rt7.349.el8.x86_64 ... PREEMPT_RT Latência (cyclictest -t1 -p99 -m -l10000): # Max Latencies: 00000 00000 00000 00000 00000 00000 00000 00000 00000
7. Automação com Ansible
Para os ambientes com múltiplos nós RT, a automação é essencial. Um playbook mínimo:
--- - name: Atualização kernel-rt RLSA-2026:27354 hosts: rt_nodes become: yes vars: reboot_timeout: 600 kernel_version: "4.18.0-553.rt7.349.el8.x86_64" tasks: - name: Verifica versão atual command: uname -r register: current_kernel changed_when: false - name: Atualiza kernel-rt dnf: name: kernel-rt state: latest when: current_kernel.stdout != kernel_version - name: Regenera initramfs command: dracut -f /boot/initramfs-{{ kernel_version }}.img {{ kernel_version }} when: current_kernel.stdout != kernel_version - name: Configura GRUB para o novo kernel command: grub2-set-default 0 when: current_kernel.stdout != kernel_version - name: Reinicia o nó reboot: reboot_timeout: "{{ reboot_timeout }}" pre_reboot_delay: 5 post_reboot_delay: 30 when: current_kernel.stdout != kernel_version - name: Valida pós-reboot command: uname -r register: new_kernel failed_when: new_kernel.stdout != kernel_version
📘 Indicação de Leitura
Esse livro é um guia prático e abrangente sobre a segurança do sistema operacional Linux como um todo. O livro ensina a pensar como um atacante para fortalecer a defesa do servidor, abordando tópicos fundamentais como:
- Ferramentas de rede: Nmap, Netcat, knockd.
- Monitoramento: de arquivos e sistemas de arquivos.
- Defesas: contra malware e ataques DDoS.
- Descoberta de vulnerabilidades: como invasores encontram pontos fracos.
Eu ganho uma comissão quando você faz uma compra.
Troubleshooting
Problema 1: Kernel não inicia (kernel panic)
Sintoma: Sistema não completa o boot, entra em panic loop.
Causa comum: Conflito de módulos ou parâmetros de boot inválidos.
Solução:
1. Acesse o console out-of-band.
2. No GRUB, selecione o kernel anterior (entry com versão antiga).
3. Após o boot, investigue os logs:
$ sudo journalctl -b -1 | grep -i "panic\|oops"
4. Compare os parâmetros de boot entre os kernels:
$ cat /proc/cmdline # kernel atual $ sudo cat /proc/cmdline # (não é possível ler do kernel anterior diretamente)
Problema 2: Latência elevada após atualização
Sintoma: Aplicações RT apresentam jitter ou deadlines perdidos.
Causa: Parâmetros de isolamento de CPU ou IRQ affinity não foram preservados.
Solução:
# Verifique IRQ affinity $ cat /proc/irq/*/smp_affinity_list # Verifique isolcpus $ cat /sys/devices/system/cpu/isolated # Reaplique parâmetros via kernel command line $ sudo grubby --update-kernel=ALL --args="isolcpus=2-15 nohz_full=2-15 rcu_nocbs=0-15" $ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Problema 3: Módulos de terceiros não carregam
Sintoma: Drivers proprietários (ex: NVIDIA, drivers de storage específicos) falham ao carregar.
Causa: O novo kernel requer recompilação dos módulos DKMS.
Solução:
# Reconstrução automática com DKMS $ sudo dkms autoinstall -k 4.18.0-553.rt7.349.el8.x86_64 # Ou manualmente para um módulo específico $ sudo dkms install -m modulo -v versao -k 4.18.0-553.rt7.349.el8.x86_64
Problema 4: Espaço em /boot insuficiente
Sintoma: dnf update falha com "No space left on device".
Causa: Múltiplos kernels antigos ocupam espaço.
Solução:
# Liste todos os kernels instalados $ rpm -qa kernel-rt kernel-rt-core kernel-rt-modules | sort # Remova kernels antigos (mantenha pelo menos 2) $ sudo dnf remove kernel-rt-4.18.0-553.rt7.340.el8.x86_64 # Limpeza manual (cuidado!) $ sudo rm -f /boot/vmlinuz-4.18.0-553.rt7.340.el8.x86_64 $ sudo rm -f /boot/initramfs-4.18.0-553.rt7.340.el8.x86_64.img $ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Após a atualização, implemente monitoramento proativo:
# Script de monitoramento de latência (cron a cada 5 min) $ cat /etc/cron.d/rt-latency-monitor */5 * * * * root /usr/bin/cyclictest -t1 -p99 -m -l1000 -q > /var/log/rt-latency.log 2>&1 # Verificação de erros do kernel $ cat /etc/cron.d/rt-kernel-watchdog 0 * * * * root dmesg | grep -iE "error|fail|panic|oops|bug" | mail -s "RT Kernel Errors" admin@example.com
Conclusão
- CVE-2026-31419: Use-after-free no driver bonding → negação de serviço
- CVE-2026-31488: Validação incorreta de DSC no driver amdgpu
- CVE-2026-43056: Use-after-free no driver mana (Azure)
- CVE-2026-43279: Escrita out-of-bounds no ALSA USB-audio
- CVE-2026-46331: Corrupção de página cache no act_pedit → LPE
- CVE-2026-46090: Use-after-free no ALSA aloop
- CVE-2026-46145: Corrupção de memória no RDMA/mana
- CVE-2026-46135: Race condition no NVMe/TCP

Nenhum comentário:
Postar um comentário