Do jadra Linux 6.18 bola prijatá implementácia Binder IPC pre Android, napísaná v Rust

Do kódovej základne jadra Linux, na základe ktorej sa vytvára verzia 6.18, bola prijatá implementácia mechanizmu medzi-procesného interakcie Binder, napísaná v programovacom jazyku Rust. Binder sa používa v Androide na organizáciu interakcie medzi procesmi a vzdialeného volania metód (jeden proces Android môže volať metódu alebo funkciu v inom procese Android, pričom používa Binder na identifikáciu, volanie a prenos argumentov medzi procesmi). Kód Binder bol prepisovaný v Ruste v rámci projektu na zvýšenie bezpečnosti, propagáciu techník bezpečného programovania a zvýšenie účinnosti identifikovania problémov pri práci s pamäťou v Androide (asi 70 % zo všetkých nebezpečných zraniteľností odhalených v Androide je spôsobených chybami pri práci s pamäťou).

Použitie Rusta umožnilo riešiť niektoré problémy, s ktorými sa vyrovnávali vývojári Binder, vrátane chýb súvisiacich s počítaním odkazov, zablokovaniami a kontrolou hraníc, a zároveň výrazne znížiť zložitosti spracovania chýb. Implementácia Binder na Ruste je funkčne rovnaká ako jej pôvodná verzia v jazyku C, prechádza všetkými testami AOSP (Android Open-Source Project) a môže sa používať na vytváranie funkčných editorov Android firmvérov. Napriek pokročilým možnostiam a podpore objektov so zložitou semantikou vlastníctva, sa ovládač na Ruste ukázal byť menším ako varianta v C — 5.5 oproti 5.8 tisícom riadkov kódu.

V popise commitu autor spomína nasledujúce motívy pre prepisovanie Binder:

  • Binder sa vyvíja už 15 rokov a za tento čas jeho funkčnosť a zložitost značně vzrástli — projekt sa nachádza na križovatke všetkých komponentov Android a pokrýva množstvo úloh, ktoré presahujú rámec IPC:
    • správna analýza a konverzia obsahu transakcií, ktoré môžu obsahovať niekoľko objektov rôznych typov (napríklad ukazovatele, súborové popisovače), interagujúcich navzájom;
    • kontrola veľkosti poolov vlákien v užívateľskom priestore a zabezpečenie priradenia transakcií vláknam tak, aby sa zabránilo vzájomnému zablokovaniu pri vyčerpaní vlákien v poole;
    • sledovanie počítadiel odkazov na objekty, ktoré sú spoločné viacerými procesmi, správne preposielajúc zmeny počítadiel odkazov medzi procesmi;
    • spracovanie mnohých scenárov vzniku chýb a kombinovanie 13 rôznych zámkov, 7 počítadiel odkazov a atomických premenných. Vykonávať takéto úlohy by mal maximálne rýchlo a presne.
  • Starý kód nazbieral značný technický dlh, ktorý sťažoval hľadanie chýb aj ďalší vývoj. Napríklad sa v jadre nachádzajú rozsiahle funkcie s viac ako tisíc riadkami kódu, pochybnými metódami spracovania chýb a zamotanými štruktúrami.
  • Binder je kritická z hľadiska bezpečnosti zložka Androidu, pretože prvky platformy, ktoré fungujú v izolovaných sandboxových prostrediach, ako je proces vykresľovania v Chrome a SW Codec, majú naň priamy prístup, a zraniteľnosť v Binderi by mohla obísť izoláciu. Vysoká zložitost v kombinácii s technickým dlhom výrazne sťažuje udržanie vysokej úrovne bezpečnosti v Binderi.

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster