Páginas

segunda-feira, 22 de junho de 2026

RLSA-2026:27354 — Rocky Linux 8 kernel-rt: Atualização Crítica para Ambientes de Tempo Real



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.

text
$ 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


Antes de qualquer alteração, documente o estado atual do sistema:
bash
$ 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:

bash
$ 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
💡 Por quê: Parâmetros como isolcpus, nohz_full e rcu_nocbs são críticos para o desempenho do kernel-rt. Uma atualização pode resetar ou alterar estes parâmetros se o arquivo de configuração do GRUB não estiver devidamente preservado.

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:

bash
$ 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


3. Atualização do kernel-rt

Antes de executar a atualização, considere usar um maintenance window com janela de rollback. Para ambientes de tempo real, recomendo a abordagem staged:

bash
# 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:

text
================================================================================
 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.

text
# 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:

bash
$ 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:

text
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:

bash
$ 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):

bash
$ 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:

bash
# 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):

bash
# 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:

bash
$ 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:

yaml
---
- 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.


Segurança em Servidores Linux Ataque e Defesa: (anúncio) ->       https://link.amazon/B0iizMiB1

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:

  1. bash
    $ sudo journalctl -b -1 | grep -i "panic\|oops"

   4. Compare os parâmetros de boot entre os kernels:

  1. bash
    $ 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:

bash
# 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:

bash
# 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:

bash
# 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
Monitoramento Contínuo

Após a atualização, implemente monitoramento proativo:

bash
# 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


O RLSA-2026:27354 é uma atualização crítica para qualquer ambiente rodando Rocky Linux 8 com kernel-rt. As oito vulnerabilidades corrigidas incluem:

  • 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

Além das correções de segurança, esta atualização inclui um bug fix crítico para kernel panic no replenish_dl_entity() causado por estado DEADLINE PI stale durante de-boosting de rt_mutex — um problema que poderia derrubar nós RT em condições específicas de contenção de锁.

A mensagem principal é: não adie esta atualização. 

Em sistemas de tempo real, a previsibilidade é tão importante quanto a segurança. Um kernel com vulnerabilidades de use-after-free ou race conditions pode introduzir comportamento não determinístico — exatamente o oposto do que um sistema RT precisa.

Lembre-se das três regras de ouro para atualizações de kernel-rt em produção:

  1. Teste em staging com a mesma carga de produção.

  2. Preserve parâmetros de boot — isolcpus, nohz_full, rcu_nocbs e irqaffinity.

  3. Mantenha um plano de rollback — o kernel anterior permanece disponível no GRUB.

A atualização está disponível nos repositórios oficiais do Rocky Linux 8. Execute-a com planejamento, documentação e validação rigorosa.




Nenhum comentário:

Postar um comentário