Në kodin themelor të kernelit Linux, mbi të cilin formohet versioni 6.18, është pranuar implementimi i mekanizmit të komunikimit ndërprocesor Binder, i shkruar në Rust. Binder përdoret në Android për të organizuar ndërveprimin midis proceseve dhe thirrjen e metodave nga distanca (një proces Android mund të thërrasë një metodë ose funksion në një proces tjetër Android, duke përdorur Binder për identifikimin, thirrjen dhe kalimin e argumenteve ndërmjet proceseve). Kodi i Binder është ridizajnuar në Rust si pjesë e një projekti për forcimin e sigurisë, promovimin e praktikave të sigurt të programimit dhe përmirësimin e efikasitetit të identifikimit të problemeve me menaxhimin e memories në Android (rreth 70% e të gjitha vulnerabiliteteve të rrezikshme të zbuluara në Android shkaktohen nga gabime në menaxhimin e memories).
Përdorimi i Rust ka lejuar zgjidhjen e disa problemeve me të cilat përballeshin zhvilluesit e Binder, duke përfshirë gabime të lidhura me numërimin e referencave, bllokimet dhe kontrollin e kufijve, si dhe për të reduktuar ndjeshëm kompleksitetin e trajtimit të gabimeve. Implementimi i Binder në Rust është i ngjashëm në funksionalitet me versionin origjinal në gjuhën C, kalon të gjitha testet AOSP (Projekti i Burimeve të Hapura Android) dhe mund të përdoret për të krijuar versione funksionale të firmware-it Android. Pavarësisht mundësive të avancuara dhe mbështetjes për objekte me semantikë të komplikuar të pronësisë, driveri në Rust rezultoi më i vogël se versioni në C - 5.5 kundrejt 5.8 mijë rreshtave të kodit.
Në përshkrimin e commit-it, autori përmend motivet e mëposhtme për ridizenjimin e Binder:
- Binder ka ekzistuar për 15 vjet dhe gjatë kësaj kohe funksionaliteti dhe kompleksiteti i tij janë rritur ndjeshëm - projekti ndodhet në ndërfaqen e të gjitha komponenteve të Android dhe mbulon shumë detyra që kalojnë përtej IPC:
- analizë dhe transformim të saktë të përmbajtjes së transaksioneve, të cilat mund të përmbajnë disa objekte të llojeve të ndryshme (p.sh., tregues, deshifrues skedarësh), që ndërveprojnë me njëri-tjetrin;
- kontrolli i madhësisë së grupeve të threads në hapësirën e përdoruesit dhe sigurimi i caktimit të transaksioneve në threads në mënyrë që të shmangen bllokimet reciproke kur threads në grup shterojnë;
- ndjekja e numëruesve të referencave të objekteve që ndahen nga disa procese, duke dërguar saktësisht ndryshimet e numëruesve të referencave midis proceseve;
- përpunimi i skenarëve të shumtë të ndodhjes së gabimeve dhe kombinimi i 13 bllokimeve të ndryshme, 7 numëruesve të lidhjeve dhe variablave atomikë. Gjithashtu, ai duhet të kryejë detyra të tilla sa më shpejt dhe saktë të jetë e mundur.
- Në kodin e vjetër u grumbullua një borxh teknik i dukshëm, i cili e komplikon kaq shumë si gjetjen e gabimeve ashtu edhe zhvillimin e mëtejshëm. Për shembull, në bërthamë hasen funksione të mëdha me më shumë se një mijë rreshta kodi, metoda të dyshimta të trajtimit të gabimeve dhe struktura të ngatërruara.
- Binder është një komponent kritik për sigurinë e Android, pasi elementet e platformës që punojnë në mjedise të izoluara si procesi i renderimit në Chrome dhe SW Codec kanë akses të drejtpërdrejtë tek ai, dhe një dobësi në Binder do të mund të anashkalonte izolimin. Kompleksiteti i lartë së bashku me borxhin teknik e vështirësojnë shumë ruajtjen e një niveli të lartë sigurie në Binder.
Burimi: opennet.ru
