Binder IPC-implementeringen til Android, skrevet i Rust, er blevet inkluderet i Linux-kernen 6.18

I kodebasen for Linux-kernen, som danner grundlaget for version 6.18, er implementeringen af interproceskommunikationsmekanismen Binder, skrevet i Rust, blevet accepteret. Binder bruges i Android til at organisere interaktion mellem processer og til fjernopkald af metoder (én Android-proces kan kalde en metode eller funktion i en anden Android-proces ved at bruge Binder til at identificere, kalde og overføre argumenter mellem processer). Koden til Binder blev omskrevet i Rust som led i et projekt til at styrke sikkerheden, fremme sikre programmeringspraksisser og forbedre effektiviteten ved identifikation af hukommelsesproblemer i Android (omkring 70% af alle farlige sårbarheder, der findes i Android, skyldes fejl i hukommelsesbehandling).

Brugen af Rust har løst flere problemer, som udviklerne af Binder har stået over for, herunder fejl relateret til referencecounting, deadlocks og grænsekontrol, samt markant reduceret kompleksiteten ved fejlhåndtering. Implementeringen af Binder i Rust er funktionelt tilsvarende den oprindelige version i C, den består alle AOSP (Android Open-Source Project) tests og kan bruges til at skabe funktionelle versioner af Android-firmware. På trods af de avancerede funktioner og understøttelse af objekter med kompleks ejerskabssémantik er driveren i Rust mindre end C-varianten — 5.5 mod 5.8 tusind linjer kode.

I beskrivelsen af committen nævner forfatteren følgende motiver for at omskrive Binder:

  • Binder har været i udvikling i 15 år, og i denne periode er dens funktionalitet og kompleksitet steget betydeligt — projektet befinder sig i krydsfeltet mellem alle Android-komponenter og dækker mange opgaver, der går ud over IPC:
    • korrekt analyse og transformation af indholdet i transaktioner, der kan indeholde flere objekter af forskellige typer (for eksempel, pointers, filbeskrivelser), der interagerer med hinanden;
    • kontrol af størrelsen på tråd-pools i brugerrummet og sikring af tildeling af transaktioner til tråde på en måde, der undgår deadlocks, når trådene i poolen er brugt op;
    • sporing af referencecounting af objekter, der deles mellem flere processer, ved korrekt at overføre ændringer af referencecounts mellem processerne;
    • håndtering af mange fejlscenarier og kombination af 13 forskellige låse, 7 linktællere og atomariske variabler. I denne proces skal han udføre sådanne opgaver så hurtigt og korrekt som muligt.
  • Den gamle kode har en betydelig teknisk gæld, som komplicerer både fejlsøgning og videre udvikling. For eksempel findes der store funktioner med mere end tusinde kodelinjer i kernen, tvivlsomme metoder til fejlhåndtering og forvirrende strukturer.
  • Binder er en kritisk sikkerhedskomponent i Android, da elementer fra platformen, der kører i isolerede sandbox-miljøer, som f.eks. renderingsprocessen i Chrome og SW Codec, har direkte adgang til det. En sårbarhed i Binder vil tillade omgåelse af isolation. Den høje kompleksitet sammen med den tekniske gæld gør det meget vanskeligt at opretholde et højt sikkerhedsniveau i Binder.

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster