Pular para o conteúdo

Linux 7.4 adiciona TAINT_FORCED_BIND para binds forçados de drivers

O Linux 7.4 vai marcar o kernel com a flag Y sempre que os arquivos sysfs de bind ou unbind de drivers forem usados, depois que o fuzzing do syzbot gerou pilhas de relatórios de bug inúteis.

Por Tech AI Wire Team

4 min de leitura

XLinkedIn
Part of Greg Kroah-Hartman's patch email in a monospace font, describing syzbot's fuzzing of the bind and unbind files and the new TAINT_FORCED_BIND flag.
Foto: Greg Kroah-Hartman's patch email, via The Mail Archive

O Linux 7.4 vai sinalizar qualquer kernel em que alguém tenha conectado um driver a um dispositivo manualmente. A nova flag TAINT_FORCED_BIND de Greg Kroah-Hartman, exibida como a letra Y, marca relatórios de travamento de sistemas que usaram os arquivos sysfs bind e unbind. Ferramentas de fuzzing vinham usando esses arquivos para forçar drivers em hardware inadequado. O resultado foi uma enxurrada de relatórios de bug que não importam para nenhum usuário real.

O Phoronix informou em 19 de outubro de 2026 que a mudança está no pull request do driver core para o Linux 7.4. Esse pull request foi enviado antes de a janela de merge do 7.4 abrir. O Linux 7.3 saiu em 18 de outubro, e a janela de merge do 7.4, quando novos recursos entram, abriu no dia seguinte.

O que o TAINT_FORCED_BIND faz

Um taint é um marcador que o kernel define em si mesmo quando algo incomum aconteceu. Ele aparece impresso nos relatórios de travamento. Um desenvolvedor que lê um deles então sabe que o sistema não estava em um estado normal.

O sysfs é um sistema de arquivos virtual, montado em /sys, que mostra objetos do kernel como arquivos. Cada driver tem um arquivo “bind” e um “unbind”. Escrever o ID de barramento de um dispositivo neles conecta ou desconecta esse driver manualmente, explica o Phoronix.

O patch de Kroah-Hartman define a nova flag “se os arquivos sysfs bind/unbind forem gravados em algum momento”, diz sua mensagem de apresentação. “A flag é ‘Y’, que não estava em uso.” A flag é definida antes de o próprio código de bind ou unbind do driver rodar. Os travamentos costumam acontecer dentro desse código, então o relatório de oops resultante mostra o que foi tentado. Um oops é o relatório de erro do kernel para uma falha grave.

DetalheTAINT_FORCED_BIND
Letra do taintY
Definida quandoO arquivo sysfs bind ou unbind de um driver é gravado
MomentoAntes de o callback de bind ou unbind rodar
Chega emO pull request do driver core do Linux 7.4
Histórico do patchPublicado pela primeira vez em 26 de agosto, v2 em 31 de agosto, v3 em 4 de setembro de 2026
Arquivos alterados8, incluindo drivers/base/bus.c e kernel/panic.c

Por que o syzbot forçou a mudança

Fuzzing significa alimentar um programa com entradas aleatórias ou inesperadas para encontrar travamentos. O syzbot é um fuzzer automatizado que roda contra o kernel. Segundo Kroah-Hartman, a interface de bind “foi abusada e recentemente sofreu um grande ‘ataque’ de fuzzing por meio de ferramentas como o syzbot”.

O syzbot começou a conectar drivers a dispositivos para os quais eles nunca foram escritos. Kroah-Hartman escreveu que isso causou “montes de erros desnecessários e patches inúteis no kernel” vindos de novos desenvolvedores. A interface foi pensada para ajudar desenvolvedores do kernel a trabalhar mais rápido em drivers. Ela também era “uma forma de depuração para usuários tentarem adicionar um novo dispositivo a um driver sem precisar recompilar o kernel”.

Nada é bloqueado. Configurações que dependem de bind e unbind “continuarão funcionando corretamente, mas agora o kernel será sinalizado”, diz a mensagem de apresentação da v3. Bugs reais de use-after-free encontrados dessa forma “ainda devem ser trabalhados”. Um bug de use-after-free é um código que acessa a memória depois de liberá-la, uma fonte clássica de falhas de segurança.

Kroah-Hartman também disse aos operadores de fuzzers o que fazer. Ferramentas sem regras escritas à mão devem “ser executadas com panic_on_taint ativado para que caiam e não continuem”. A configuração panic_on_taint interrompe o kernel assim que ele recebe um taint.

Enxurradas de relatórios de baixo valor são um problema mais amplo este ano. O Google pausou seu programa de recompensas por bugs de código aberto em 1º de outubro, após uma onda de envios gerados por IA.

Resistência de usuários de VFIO e USB

Nem todo revisor gostou da troca. Um bot de revisão, o sashiko-bot, classificou como “alta” a preocupação de que configurações legítimas passariam a ser marcadas com taint. Ele citou o VFIO, que entrega um dispositivo a uma máquina virtual, além da rede DPDK e do USB over IP. O Phoronix lista resets de hardware e a passagem de dispositivos para uma máquina virtual entre os usos legítimos.

Respondendo ao bot, Kroah-Hartman disse que esse uso “não é uma configuração ‘padrão’” e é “um abuso da api”. Armin Wolf observou que o vfio-pci com driver_override ainda precisa de bind e unbind. Ele sugeriu aplicar o taint no driver_override. Kroah-Hartman respondeu que isso deixaria de fora remoções forçadas. “É uma flag de taint sendo definida, não um panic”, escreveu.

Johan Hovold chamou o taint de “um bom meio-termo” em comparação com adicionar complexidade ou esconder os arquivos. Ele deu ao patch as tags Reviewed-by e Tested-by. Aaron Tomlin e Bradley Morgan também o revisaram.

O que isso significa para desenvolvedores

  • Verifique a saída de taint depois de migrar para o Linux 7.4. Se você reconecta dispositivos pelo sysfs para passthrough com VFIO, DPDK ou USB over IP, espere a flag Y. Ela vai aparecer em /proc/sys/kernel/tainted e nos relatórios de travamento.
  • Explique o Y nos relatórios de bug. Os mantenedores podem ler um relatório com taint Y como um problema de bind forçado e deixá-lo de lado. Se o seu bug é real, diga como você faz o bind do dispositivo e se ele acontece sem um bind manual.
  • Operadores de fuzzers: ativem o panic_on_taint. Esse é o pedido direto de Kroah-Hartman para ferramentas que gravam em bind e unbind sem regras de exclusão. A execução para no bind forçado em vez de gerar um relatório que ninguém vai tratar.
  • Autores de drivers: travamentos ainda contam. Kroah-Hartman diz que bugs reais de use-after-free alcançados por bind e unbind ainda precisam ser corrigidos. O Phoronix observa que o mesmo pull do driver core do 7.4 também traz novas adições em Rust para drivers do kernel.
  • Acompanhe a versão final do 7.4. Wolf perguntou se o taint poderia valer só para barramentos que não suportam hot-plugging. Qualquer mudança desse tipo reduziria quem vê a flag Y.

Fontes

  1. TAINT_FORCED_BIND Sent In For Linux 7.4 To Deal With Major Fuzzing Attack - Phoronix
  2. [PATCH v2 0/2] driver core: add TAINT_FORCED_BIND for when userspace manually messes with devices and drivers - linux-trace-kernel mailing list
  3. [PATCH v3 0/2] driver core: add TAINT_FORCED_BIND for when userspace manually messes with devices and drivers - linux-modules mailing list
  4. Linux Kernel Introducing New Taint Due To Fuzzing Bots Yielding Impractical Bug Reports - Phoronix

Artigos relacionados