A Linux 6.18 kernelbe integrálásra került a Binder IPC Androidhoz, Rust nyelven megírva

A Linux kernel kódalapjába, amelyre a 6.18-as verzió épül, elfogadták a Binder köztes folyamatok közötti kommunikációs mechanizmusát, amelyet Rust nyelven írtak. A Binder az Androidban a folyamatok közötti interakciók és a távoli eljárás-illesztések (egy Android-folyamat hívhat egy metódust vagy funkciót a másik Android-folyamatban, a Binder segítségével az azonosításhoz, a híváshoz és az argumentumok átadásához) szervezésére szolgál. A Binder kódját Rust nyelvre írták át a biztonság növelésére irányuló projekten belül, amely a biztonságos programozás technikáinak népszerűsítésére és a memóriakezelési problémák hatékonyabb azonosítására irányult az Androidban (a felfedezett összes kritikus sebezhetőség körülbelül 70%-a memóriakezelési hibákból fakad).

A Rust használata lehetővé tette a Binder fejlesztői által tapasztalt egyes problémák megoldását, beleértve a referencia-számlálással, zárolásokkal és határ-ellenőrzésekkel kapcsolatos hibákat, valamint jelentősen csökkentette a hibakezelés bonyolultságát. A Rust nyelvű Binder megvalósításának funkcionális hasonlóságai vannak az eredeti C nyelvű változattal, megfelel az összes AOSP (Android Open-Source Project) tesztnek és használható Android firmware-ek működő változatának létrehozásához. A fejlettebb lehetőségek és a bonyolult tulajdonjogi szemantikájú objektumok támogatása ellenére a Rust alapú meghajtó kevesebb kódot tartalmaz, mint a C változata - 5,5 ezer helyett 5,8 ezer sor kód.

A commit leírásában a szerző az alábbi indokokat említi a Binder átírásához:

  • A Binder már 15 éve fejlődik, és ez idő alatt annak funkcionalitása és összetettsége jelentősen megnőtt - a projekt az Android összes komponense határterületén helyezkedik el, és számos, az IPC-n túli feladatot ölel fel:
    • a tranzakciók tartalmának helyes elemzése és átalakítása, amelyek különböző típusú objektumokat (például mutatókat, fájl-azonosítókat) tartalmazhatnak, amelyek kölcsönhatásban állnak egymással;
    • a felhasználói térbeli szál medencék méretének ellenőrzése és a tranzakciók szálakhoz való hozzárendelésének biztosítása annak érdekében, hogy elkerüljék a holtpontokat a medence szálainak kimerülésekor;
    • a több folyamat által közösen használt objektumok referencia-számlálóinak nyomon követése, a referencia-számlálók közötti változások helyes átadása a folyamatok között;
    • hibernációs hibák és 13 különböző zárolás, 7 hivatkozás számláló és atomikus változók együttes kezelése. Eközben ezeket a feladatokat a lehető leggyorsabban és helyesen kell végrehajtani.
  • A régi kódban jelentős technikai adósság halmozódott fel, amely megnehezítette a hibák keresését és a további fejlesztést. Például a magban nagyobb funkciók találhatók, amelyek több mint ezer sor kódot tartalmaznak, kétes hiba-kezelési módszerek és zavaros struktúrák.
  • A Binder egy kritikus biztonsági szempontból fontos összetevő az Android számára, mivel a platform elemei, amelyek elszigetelt sandbox környezetben dolgoznak, például a Chrome renderelő folyamata és a SW Codec, közvetlen hozzáféréssel rendelkeznek hozzá, és a Binder sebezhetősége lehetővé tenné az izoláció megkerülését. A magas összetettség és a technikai adósság együttesen jelentősen megnehezítik a Binder biztonsági szintjének fenntartását.

Forrás: opennet.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster