Saltar al contenido

Linux 7.4 añade TAINT_FORCED_BIND para las vinculaciones forzadas de controladores

Linux 7.4 marcará el kernel con el indicador Y cada vez que se usen los archivos sysfs de bind o unbind de un controlador, tras una avalancha de informes de errores inútiles del fuzzing de syzbot.

Por Tech AI Wire Team

4 min de lectura

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

Linux 7.4 marcará cualquier kernel en el que alguien haya vinculado a mano un controlador a un dispositivo. El nuevo indicador TAINT_FORCED_BIND de Greg Kroah-Hartman, que se muestra como la letra Y, marca los informes de fallos de sistemas que usaron los archivos bind y unbind de sysfs. Las herramientas de fuzzing habían usado esos archivos para forzar controladores sobre hardware inadecuado. El resultado fue una avalancha de informes de errores que no importan a ningún usuario real.

Phoronix informó el 19 de octubre de 2026 de que el cambio está en la pull request del driver core para Linux 7.4. Esa pull request se envió antes de que se abriera la ventana de fusión de 7.4. Linux 7.3 salió el 18 de octubre, y la ventana de fusión de 7.4, el periodo en el que entran las nuevas funciones, se abrió al día siguiente.

Qué hace TAINT_FORCED_BIND

Un taint es una marca que el kernel se pone a sí mismo cuando ha ocurrido algo inusual. Se imprime en los informes de fallos. Un desarrollador que lea uno sabe entonces que el sistema no estaba en un estado normal.

sysfs es un sistema de archivos virtual, montado en /sys, que muestra los objetos del kernel como archivos. Cada controlador tiene un archivo «bind» y otro «unbind». Escribir en ellos el ID de bus de un dispositivo vincula o desvincula ese controlador a mano, explica Phoronix.

El parche de Kroah-Hartman activa el nuevo indicador «si alguna vez se escribe en los archivos sysfs bind/unbind», según su carta de presentación. «El indicador es “Y”, que no se usaba». El indicador se activa antes de que se ejecute el propio código de bind o unbind del controlador. Los fallos suelen ocurrir dentro de ese código, así que el informe oops resultante muestra lo que se intentó. Un oops es el informe de error del kernel ante un fallo grave.

DetalleTAINT_FORCED_BIND
Letra de taintY
Se activa cuandoSe escribe en el archivo sysfs bind o unbind de un controlador
MomentoAntes de que se ejecute el callback de bind o unbind
Llega enLa pull request del driver core de Linux 7.4
Historial del parchePrimera publicación el 26 de agosto, v2 el 31 de agosto, v3 el 4 de septiembre de 2026
Archivos modificados8, entre ellos drivers/base/bus.c y kernel/panic.c

Por qué syzbot forzó el cambio

El fuzzing consiste en dar a un programa entradas aleatorias o inesperadas para encontrar fallos. syzbot es un fuzzer automatizado que se ejecuta contra el kernel. Según Kroah-Hartman, la interfaz bind «ha sufrido abusos y recientemente ha sido objeto de un gran “ataque” de fuzzing mediante herramientas como syzbot».

syzbot empezó a vincular controladores a dispositivos para los que nunca se escribieron. Kroah-Hartman escribió que esto provocó «montones de errores innecesarios y parches del kernel inútiles» por parte de nuevos desarrolladores. La interfaz se pensó para ayudar a los desarrolladores del kernel a trabajar más rápido en los controladores. También era «una vía de depuración para que los usuarios intentaran añadir un nuevo dispositivo a un controlador sin tener que recompilar su kernel».

No se bloquea nada. Las configuraciones que dependen de bind y unbind «seguirán funcionando correctamente, pero ahora el kernel quedará marcado», dice la carta de presentación de la v3. En los fallos reales de use-after-free encontrados de esta forma «se debería seguir trabajando». Un fallo use-after-free es código que accede a la memoria después de liberarla, una fuente clásica de agujeros de seguridad.

Kroah-Hartman también dijo a los operadores de fuzzers qué deben hacer. Las herramientas sin reglas escritas a mano deberían «ejecutarse con panic_on_taint activado para que se caigan y no sigan adelante». El ajuste panic_on_taint detiene el kernel en cuanto queda marcado.

Las avalanchas de informes de poco valor son un problema más amplio este año. Google pausó su programa de recompensas por errores de código abierto el 1 de octubre tras un aumento de envíos generados por IA.

Objeciones de usuarios de VFIO y USB

No a todos los revisores les gustó el compromiso. Un bot de revisión, sashiko-bot, calificó de preocupación «alta» que configuraciones legítimas quedaran ahora marcadas con el taint. Mencionó VFIO, que cede un dispositivo a una máquina virtual, además de las redes DPDK y USB sobre IP. Phoronix incluye los reinicios de hardware y el paso de dispositivos a una máquina virtual entre los usos legítimos.

Al responder al bot, Kroah-Hartman dijo que ese uso «no es una configuración “estándar”» y que es «un abuso de la API». Armin Wolf señaló que vfio-pci con driver_override todavía necesita bind y unbind. Propuso aplicar el taint en driver_override en su lugar. Kroah-Hartman respondió que así no se detectarían las eliminaciones forzadas. «Se está activando un indicador de taint, no un pánico», escribió.

Johan Hovold calificó el taint de «un buen compromiso» frente a añadir complejidad u ocultar los archivos. Dio al parche las etiquetas Reviewed-by y Tested-by. Aaron Tomlin y Bradley Morgan también lo revisaron.

Qué significa esto para los desarrolladores

  • Revise la salida de taint tras pasar a Linux 7.4. Si vuelve a vincular dispositivos a través de sysfs para passthrough con VFIO, DPDK o USB sobre IP, cuente con el indicador Y. Aparecerá en /proc/sys/kernel/tainted y en los informes de fallos.
  • Explique la Y en los informes de errores. Los mantenedores pueden leer un informe con taint Y como un problema de vinculación forzada y dejarlo de lado. Si su fallo es real, indique cómo vincula el dispositivo y si ocurre sin una vinculación manual.
  • Operadores de fuzzers: activen panic_on_taint. Es la petición directa de Kroah-Hartman para las herramientas que escriben en bind y unbind sin reglas de exclusión. La ejecución se detiene en la vinculación forzada en lugar de producir un informe que nadie atenderá.
  • Autores de controladores: los fallos siguen contando. Kroah-Hartman dice que los fallos reales de use-after-free alcanzados mediante bind y unbind todavía deben corregirse. Phoronix señala que la misma pull request del driver core de 7.4 también trae nuevas incorporaciones de Rust para los controladores del kernel.
  • Siga de cerca la versión final de 7.4. Wolf preguntó si el taint podría aplicarse solo a los buses que no admiten la conexión en caliente. Cualquier cambio así reduciría quién ve el indicador Y.

Fuentes

  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

Artículos relacionados