In de Linux-kernel 6.18 is de Binder IPC-implementatie voor Android, geschreven in Rust, aangenomen

In de codebasis van de Linux-kern, waarop versie 6.18 is gebaseerd, is de implementatie van het interprocesscommunicatiemechanisme Binder aangenomen, geschreven in de programmeertaal Rust. Binder wordt in Android gebruikt om de interactie tussen processen en de aanroep van methoden op afstand te organiseren (ƩƩn Android-proces kan een methode of functie in een ander Android-proces aanroepen met behulp van Binder voor identificatie, aanroep en argumentoverdracht tussen processen). De Binder-code is herschreven in Rust als onderdeel van een project om de beveiliging te versterken, veilige programmeerpraktijken te bevorderen en de effectiviteit van het opsporen van problemen met geheugenbeheer in Android te verbeteren (ongeveer 70% van alle gevaarlijke kwetsbaarheden in Android zijn te wijten aan geheugenfouten).

Het gebruik van Rust heeft enkele problemen opgelost waarmee ontwikkelaars van Binder werden geconfronteerd, waaronder fouten met betrekking tot het tellen van verwijzingen, blokkades en grenscontrole, en heeft de complexiteit van foutafhandeling aanzienlijk verminderd. De implementatie van Binder in Rust is qua functionaliteit vergelijkbaar met de oorspronkelijke versie in C, doorstaat alle tests van AOSP (Android Open-Source Project) en kan worden gebruikt om werkende versies van Android-firmware te creĆ«ren. Ondanks geavanceerde mogelijkheden en ondersteuning voor objecten met complexe eigendomssemantiek, is de Rust-driver kleiner dan de C-versie — 5,5 tegen 5,8 duizend regels code.

In de beschrijving van de commit vermeldt de auteur de volgende redenen voor het herschrijven van Binder:

  • Binder is al 15 jaar in ontwikkeling en in die tijd zijn de functionaliteit en complexiteit aanzienlijk toegenomen — het project bevindt zich op het snijvlak van alle Android-componenten en bestrijkt vele taken die verder gaan dan IPC:
    • correcte analyse en conversie van de inhoud van transacties, die meerdere objecten van verschillende typen kunnen bevatten (bijvoorbeeld pointers, bestandsdescriptoren), die met elkaar interageren;
    • controle van de grootte van threadpools in de gebruikersruimte en zorg voor de toewijzing van transacties aan threads zodanig dat wederzijdse blokkeringen worden vermeden bij uitputting van threads in de pool;
    • bijhouden van de referentietellers van objecten die door meerdere processen worden gedeeld, waarbij wijzigingen in de referentietellers correct tussen processen worden verzonden;
    • de verwerking van talrijke foutscenario's en de combinatie van 13 verschillende vergrendelingen, 7 linktelling en atomaire variabelen. Bij het uitvoeren van dergelijke taken moet hij zo snel en nauwkeurig mogelijk zijn.
  • In de oude code is er een aanzienlijke technische schuld opgebouwd, die zowel het opsporen van fouten als de verdere ontwikkeling bemoeilijkt. Bijvoorbeeld, in de kern komen grote functies voor van meer dan duizend regels code, dubieuze foutafhandelingsmethoden en verwarrende structuren.
  • Binder is een kritische component voor de veiligheid van Android, omdat platformelementen die in geĆÆsoleerde sandbox-omgevingen werken, zoals de renderingsprocessen in Chrome en SW Codec, er directe toegang toe hebben, en een kwetsbaarheid in Binder kan de isolatie omzeilen. De hoge complexiteit in combinatie met technische schuld bemoeilijkt het handhaven van een hoog beveiligingsniveau in Binder aanzienlijk.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster