La implementación de Binder IPC para Android, escrita en Rust, ha sido aceptada en el núcleo de Linux 6.18

En la base de código del núcleo de Linux, sobre la cual se forma la versión 6.18, se ha adoptado la implementación del mecanismo de interacción entre procesos Binder, escrita en Rust. Binder se utiliza en Android para organizar la interacción entre procesos y la llamada remota de métodos (un proceso de Android puede invocar un método o función en otro proceso de Android, utilizando Binder para identificar, invocar y transferir argumentos entre procesos). El código de Binder ha sido reescrito en Rust como parte de un proyecto para mejorar la seguridad, promover prácticas de programación seguras y aumentar la eficiencia en la detección de problemas relacionados con la memoria en Android (aproximadamente el 70% de todas las vulnerabilidades críticas detectadas en Android son causadas por errores de manejo de memoria).

El uso de Rust ha permitido resolver algunos problemas con los que se enfrentaban los desarrolladores de Binder, incluyendo errores relacionados con el conteo de referencias, bloqueos y verificación de límites, así como reducir significativamente la complejidad del manejo de errores. La implementación de Binder en Rust es funcionalmente equivalente a la versión original en C, pasa todas las pruebas de AOSP (Proyecto de Código Abierto de Android) y puede ser utilizada para crear versiones funcionales de firmware de Android. A pesar de las capacidades avanzadas y el soporte para objetos con semántica de posesión compleja, el controlador en Rust resultó ser más pequeño que la versión en C: 5.5 contra 5.8 mil líneas de código.

En la descripción del commit, el autor menciona los siguientes motivos para reescribir Binder:

  • Binder ha estado en desarrollo durante 15 años y durante este tiempo su funcionalidad y complejidad han aumentado significativamente; el proyecto se encuentra en la intersección de todos los componentes de Android y abarca múltiples tareas que van más allá de IPC:
    • análisis y transformación adecuados del contenido de transacciones que pueden contener múltiples objetos de diferentes tipos (por ejemplo, punteros, descriptores de archivos) que interactúan entre sí;
    • controlar el tamaño de los grupos de hilos en el espacio de usuario y garantizar que las transacciones se asignen a los hilos de tal manera que se eviten bloqueos mutuos cuando se agoten los hilos en el grupo;
    • seguimiento de los contadores de referencias de objetos que son compartidos entre varios procesos, transmitiendo correctamente los cambios en los contadores de referencias entre procesos;
    • el manejo de numerosos escenarios de errores y la combinación de 13 tipos diferentes de bloqueos, 7 contadores de enlaces y variables atómicas. Al mismo tiempo, debe ejecutar estas tareas lo más rápida y correctamente posible.
  • El código antiguo acumuló una cantidad significativa de deuda técnica, lo que complicaba tanto la búsqueda de errores como el desarrollo posterior. Por ejemplo, en el núcleo hay grandes funciones de más de mil líneas de código, métodos cuestionables de manejo de errores y estructuras confusas.
  • Binder es un componente crítico desde el punto de vista de la seguridad en Android, ya que los elementos de la plataforma que operan en entornos aislados de sandbox, como el proceso de representación en Chrome y el códec SW, tienen acceso directo a él, y una vulnerabilidad en Binder podría permitir eludir esta aislamiento. La alta complejidad junto con la deuda técnica complican enormemente el mantenimiento de un alto nivel de seguridad en Binder.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster