I Linux-kärnan 6.18 har en implementation av Binder IPC för Android antagits, skriven i Rust.

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

Köp pålitlig webbhotell med DDoS-skydd, VPS VDS-servrar 🔥 Köp pålitlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster