I kodbasen för Linux-kÀrnan, som ligger till grund för version 6.18, har implementeringen av mekanismen för mellanprocesskommunikation, Binder, accepterats, skriven i Rust. Binder anvÀnds i Android för att organisera interaktionen mellan processer och för fjÀrranrop av metoder (en Android-process kan anropa en metod eller funktion i en annan Android-process, vilket anvÀnder Binder för att identifiera, anropa och överföra argument mellan processerna). Koden för Binder har skrivits om i Rust som en del av ett projekt för att förbÀttra sÀkerheten, frÀmja metoder för sÀker programmering och öka effektiviteten vid identifiering av minnesproblem i Android (ungefÀr 70% av alla farliga sÄrbarheter i Android orsakas av minneshanteringsfel).
AnvĂ€ndningen av Rust har gjort det möjligt att lösa vissa problem som utvecklarna av Binder har stött pĂ„, inklusive buggar relaterade till referensrĂ€kning, lĂ„sning och grĂ€nskontroll, samt att avsevĂ€rt minska komplexiteten av felhantering. Implementeringen av Binder i Rust Ă€r funktionellt lik den ursprungliga versionen i C, genomgĂ„r alla tester i AOSP (Android Open-Source Project) och kan anvĂ€ndas för att skapa arbetsversioner av Android-firmware. Trots dess avancerade funktioner och stöd för objekt med komplex Ă€ganderĂ€ttssemantik, har drivrutinen i Rust blivit mindre Ă€n versionen i C â 5.5 mot 5.8 tusen kodrader.
I commitbeskrivningen nÀmner författaren följande motiv för att skriva om Binder:
- Binder har utvecklats i 15 Ă„r och under denna tid har dess funktionalitet och komplexitet ökat betydligt â projektet befinner sig i skĂ€rningspunkten för alla Android-komponenter och omfattar mĂ„nga uppgifter som gĂ„r bortom IPC:
- korrekt analys och transformation av innehÄllet i transaktioner som kan innehÄlla flera objekt av olika typer (t.ex. pekare, filbeskrivare) som interagerar med varandra;
- kontroll av storleken pÄ trÄdpooler i anvÀndarrymd och sÀkerstÀllande av att transaktioner tilldelas trÄdar pÄ ett sÀtt som undviker dödlÀgen nÀr trÄdarna i poolen Àr slut;
- övervakning av referensrÀknare för objekt som anvÀnds av flera processer, korrekt vidarebefordra Àndringar i referensrÀknare mellan processerna;
- hantering av mÄnga olika felaktighetsfall och kombinera 13 olika lÄs, 7 lÀnkrÀknare och atomÀra variabler. Vid detta ska liknande uppgifter utföras sÄ snabbt och korrekt som möjligt.
- Den gamla koden har samlat pÄ sig en betydande teknisk skuld som har komplicerat bÄde feluppspÄrning och vidare utveckling. Till exempel finns det stora funktioner i kÀrnan med mer Àn tusen rader kod, tveksamma felhanteringsmetoder och komplicerade strukturer.
- Binder Àr en kritisk sÀkerhetskomponent för Android, eftersom plattformelement som körs i isolerade sandbox-miljöer, sÄsom renderingprocessen i Chrome och SW Codec, har direkt tillgÄng till den. En sÄrbarhet i Binder kan kringgÄ isoleringen. Den höga komplexiteten, i kombination med teknisk skuld, försvÄrar kraftigt upprÀtthÄllande av en hög sÀkerhetsnivÄ i Binder.
KĂ€lla: opennet.ru
