No kernel Linux 6.18, foi aceita a implementação do Binder IPC para Android, escrita em Rust

Na base de código do núcleo Linux, na qual se baseia a versão 6.18, foi aceita a implementação do mecanismo de interação entre processos Binder, escrita na linguagem Rust. O Binder é utilizado no Android para organizar a interação entre processos e a chamada remota de métodos (um processo Android pode chamar um método ou função em outro processo Android, usando o Binder para identificar, chamar e transmitir argumentos entre processos). O código do Binder foi reescrito em Rust como parte de um projeto para aumentar a segurança, promover práticas de programação segura e melhorar a detecção de problemas relacionados à memória no Android (cerca de 70% de todas as vulnerabilidades perigosas identificadas no Android são causadas por erros no manuseio da memória).

O uso do Rust permitiu resolver alguns problemas enfrentados pelos desenvolvedores do Binder, incluindo erros relacionados ao contagem de referências, bloqueios e verificação de limites, além de reduzir significativamente a complexidade do tratamento de erros. A implementação do Binder em Rust é funcionalmente equivalente à versão original em C, passa em todos os testes do AOSP (Android Open-Source Project) e pode ser usada para criar versões funcionais de firmware Android. Apesar de suas capacidades avançadas e suporte a objetos com semântica de posse complexa, o driver em Rust acabou sendo menor do que a versão em C — 5,5 contra 5,8 mil linhas de código.

Na descrição do commit, o autor menciona os seguintes motivos para reescrever o Binder:

  • O Binder está em desenvolvimento há 15 anos e, durante esse tempo, sua funcionalidade e complexidade aumentaram significativamente — o projeto está na interseção de todos os componentes do Android e abrange muitas tarefas além de IPC:
    • análise e transformação correta do conteúdo das transações, que podem conter vários objetos de diferentes tipos (como ponteiros, descritores de arquivo), interagindo entre si;
    • controle do tamanho dos pools de threads no espaço do usuário e garantia de que as transações sejam atribuídas a threads de forma a evitar bloqueios mútuos ao esgotar as threads no pool;
    • monitoramento dos contadores de referência de objetos compartilhados por vários processos, transmitindo corretamente as alterações nos contadores de referência entre processos;
    • processamento de múltiplos cenários de erro e combinação de 13 bloqueios diferentes, 7 contadores de referência e variáveis atômicas. Além disso, ele deve realizar essas tarefas o mais rapidamente e corretamente possível.
  • O código antigo acumulou uma dívida técnica considerável, que dificultava tanto a busca de erros quanto o desenvolvimento futuro. Por exemplo, na raiz, existem grandes funções com mais de mil linhas de código, métodos de tratamento de erros questionáveis e estruturas confusas.
  • O Binder é um componente crítico em termos de segurança do Android, pois os elementos da plataforma que operam em ambientes isolados, como o processo de renderização no Chrome e o SW Codec, têm acesso direto a ele, e uma vulnerabilidade no Binder pode contornar essa isolação. A alta complexidade juntamente com a dívida técnica complicam significativamente a manutenção de um alto nível de segurança no Binder.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster