Implementace Binder IPC pro Android, napsaná v Rust, byla přijata do jádra Linux 6.18

Do kódu jádra Linux, na jehož základě vzniká verze 6.18, byla přijata implementace mechanismu meziprocesní komunikace Binder napsaná v jazyce Rust. Binder se používá v Androidu pro organizaci interakce mezi procesy a vzdáleného volání metod (jeden proces Android může zavolat metodu nebo funkci v jiném procesu Android prostřednictvím Bindera, který se používá k identifikaci, volání a předávání argumentů mezi procesy). Kód Bindera byl přepracován do Rustu jako součást projektu zaměřeného na zvýšení bezpečnosti, propagaci metod bezpečného programování a zlepšení účinnosti odhalování problémů s pamětí v Androidu (přibližně 70 % všech nebezpečných zranitelností odhalených v Androidu je způsobeno chybami při práci s pamětí).

Použití Rustu umožnilo vyřešit některé problémy, se kterými se vývojáři Bindera potýkali, včetně chyb spojených s počítáním odkazů, zámky a kontrolou hranic, a také výrazně snížilo složitost zpracování chyb. Implementace Bindera v Rustu je funkčně ekvivalentní původní verzi v C, prochází všemi testy AOSP (Android Open-Source Project) a může být použita k vytváření funkčních verzí Android firmware. Přestože má pokročilé možnosti a podporu objektů se složitou sémantikou vlastnictví, řidič v Rustu je menší než varianta v C – 5,5 oproti 5,8 tisícům řádků kódu.

V popisu commitu autor zmiňuje následující důvody pro přepisování Bindera:

  • Binder se vyvíjí už 15 let a za tuto dobu se jeho funkčnost a složitost značně zvýšily – projekt se nachází na pomezí všech komponentů Android a pokrývá řadu úkolů, které přesahují rámec IPC:
    • správná analýza a transformace obsahu transakcí, které mohou obsahovat více objektů různých typů (například ukazatele, souborové deskriptory) interagujících mezi sebou;
    • řízení velikosti poolů vláken v uživatelském prostoru a zajištění přidělování transakcí vláknům tak, aby se předešlo vzájemným zámkům při vyčerpání vláken v poolu;
    • sledování počítadel odkazů objektů, které jsou sdílené mezi několika procesy, a správné přenášení změn počítadel odkazů mezi procesy;
    • zpracování mnoha scénářů vzniku chyb a kombinace 13 různých zámků, 7 počítadel odkazů a atomových proměnných. Přitom by měl tyto úkoly vykonávat co nejrychleji a nejpřesněji.
  • Ve starém kódu se nahromadila značná technická zadluženost, která ztěžovala jak hledání chyb, tak i další vývoj. Například v jádru se vyskytují velké funkce s více než tisíci řádky kódu, sporné metody zpracování chyb a komplikované struktury.
  • Binder je z hlediska bezpečnosti kritickou součástí Androidu, protože prvky platformy pracující v izolovaných sandboxových prostředích, jako je vykreslovací proces v Chromu a SW Codec, mají k němu přímý přístup, a zranitelnost v Binderu by mohla umožnit obcházení izolace. Vysoká složitost v kombinaci s technickým dluhem značně ztěžují udržení vysoké úrovně bezpečnosti v Binderu.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster