Dopamino jailbreak kūrėjas aptaria sunkiai suvokiamą Spinlock Timeout Panic problemą

Išbandykite Mūsų Instrumentą, Kaip Pašalinti Problemas





The Dopaminas „Jailbreak“ įrankis, skirtas A12–A15 įrenginiams, kuriuose veikia „iOS“ ir „iPadOS 15.0–15.4.1“, yra vienintelis naujausias „Jailbreak“, šiuo metu pasiekiamas bet kuriam naujesniam nei „iPhone X“ įrenginiui. Tai pasakius, nenuostabu, kad tai populiarus pasirinkimas kalėjimo laužytojai šiandien.



  Larsas Fröderis „Twitter“ paskelbė „GitHub“ puslapyje apie „Spinlock“ skirtojo laiko paniką dėl Dopamino jailbreak.

Bet jei naudojote dopaminą arba sekate projektą nuo pat jo pradžios, tikriausiai esate girdėję tam tikrą žodį, kurį keletą kartų išmetė projekto pagrindinis kūrėjas Larsas Fröderis ( @opa334dev ) ir naudotojams: Spinlock.

Iš tiesų, yra žinoma problema, kuri turi įtakos Dopamino įkalinimui, vadinama Spinlock Timeout Panic, ir galiausiai dėl to vartotojo įrenginys rodo rausvą ekraną, o po to paleidžiamas iš naujo iš pažiūros neprovokuojamu būdu. Techniškai problema aprašyta taip:



Atrodo, kad dyld_shared_cache vykdomųjų puslapių atvaizdavimas PPL suaktyvina didžiosios ir mažosios raidės elgseną, dėl kurios kartais nutrūksta atminties puslapio sukimosi laikas, dėl ko kyla branduolio panika.

Kuo daugiau patobulinimų įdiegiamos „hook C“ funkcijos ir kuo daugiau procesų jie įveda, tuo dažniau toks elgesys suveikia.

Atrodo, kad šią problemą galima išspręsti sujungus visus prijungtus puslapius, tačiau vartotojo erdvė negali atlaikyti tokio užrakto ir rasti objektą vm_page branduolio atmintyje, kad būtų galima tiesiogiai apversti laidinį bitą, yra sunku.



Kadangi niekada asmeniškai nepatyriau nė vienos iš šių problemų dėl savo dopamino įrenginio, buvo sunku paaiškinti, kaip tai atrodo arba kada tai įvyksta, bet aš kalbėjausi su Fröder ir paklausiau, kas, jų manymu, tai gali sukelti, kad sužinočiau daugiau apie tai, kaip tai padaryti. jie bando tai spręsti.

Fröderio atsakymas buvo įžvalgus tokiems netechniniams žmonėms kaip aš ir tikriausiai daugeliui kitų jailbreak bendruomenės narių ir nuo to laiko paskelbta „GitHub“ leidimo puslapyje kad visuomenė matytų. Visas atsakymas, cituojamas žemiau, atskleidžia Fröderio supratimą apie „Spinlock Timeout Panic“ problemą:

Čia yra bandymas nuodugniau paaiškinti problemą, kaip geriausiai suprantu. Atminkite, kad jis pagrįstas prielaidomis, kurių iš esmės neįmanoma patikrinti.



Taigi kelių sriegių sistemoje „užraktai“ naudojami, kad du siūlai netrukdytų vienas kitam. Per tą vieną giją galima įsigyti užraktą, atlikti modifikaciją ir ją atrakinti. Kol užrakinta, kita gija, bandanti gauti užraktą, lauks, kol objektas vėl bus atrakintas.

„Spinlock“ iš esmės yra tas pats dalykas, tik naudojamas su našumu susijusiems dalykams, o pagrindinis skirtumas yra tas, kad „spinlock“ gali pasibaigti, jei kažkas užtrunka per ilgai, o kita gija bando gauti užraktą. Taigi įsigyjant užraktą, o objektas jau užrakintas, jis lauktų kelių varnelių ir, jei per tą laiką objektas nebus atrakintas, pasibaigs laikas.



Šis mechanizmas pats savaime nėra problema, problema yra susijusi su atmintis puslapių. Kiekvienas atminties puslapis (kuris apibūdina 16 kB RAM sritį) turi sukimosi užraktą, kad nekiltų problemų, kai keli procesai bando gauti tą patį puslapį tuo pačiu metu.

Konkretūs puslapiai gali būti susieti su keliais procesais (pvz., jei abu įkelia tą pačią biblioteką), jie pakartotinai naudoja tą patį puslapį, kad taupytų atmintį. Tweaks nori perrašyti tokią atmintį kiekvienam procesui, todėl pirmiausia turi padaryti esamo atvaizdavimo procesui būdingą kopiją ir susieti ją ant jos, kad pvz. vienas puslapis gali būti pakeistas viename procese, o kituose procesuose lieka atsargų. Atrodo, kad problema konkrečiai iškyla, kai atvaizduojama puslapio, esančio dyld_shared_cache, viršuje.



Problema ta, kad „Apple“ tikriausiai niekada neišbandė tokio prikabinimo ir, matyt, kai tai darai daugelyje procesų, gali būti, kad pradinis puslapis (vienas iš bendrinamo atvaizdavimo) gali būti išspausdintas, nes jis nėra aktyviai naudojamas. . Puslapio puslapiuose iš esmės jis pašalinamas iš RAM, o kai jis vėl pasiekiamas, jis vėl bus įkeltas. Akcijų sistemoje tai neįvyks, nes niekas nebuvo užsikabinęs.

Dabar atrodo, kad pagrindinė priežastis yra kažkas, kas bando įkelti anksčiau išspausdintą bendrinamą / vykdomąjį puslapį. Tai sukelia išankstinio pasirinkimo problemą, kai viena gija paima sukimosi užraktą ir, nors ir turi tai, ji patenka į kitą kontekstą, kuris taip pat atima tas pats sukimosi užraktas (Prevencija iš esmės yra mechanizmas, leidžiantis vieną giją naudoti kažkam kitam, net jei ji šiuo metu užimta, kodas turi jį aiškiai išjungti ir iš naujo įjungti, jei yra kodo dalis, kuri visada turi būti vykdoma vienu metu) . Taigi atrodo, kad yra vienas kodo kelias, kuris iškviečiamas tik dėl šio konkretaus elgesio, kai „Apple“ netinkamai išjungia pirmenybę, todėl viena gija du kartus paima tą patį sukimosi užraktą, todėl pasibaigia laikas, nes senasis kontekstas nebevykdomas ir vėl negali atrakinti spinlock.



Kalbant apie jo mažinimą, bandžiau maišyti su spinlock susijusiais kintamaisiais, kad būtų didesnis slenkstis, kurio reikia, kad laikas pasibaigtų, deja, „Apple“ mus išmušė, nes viskas, kas su tuo susiję, yra apsaugota KTRR, kuriai mes neturime aplinkkelio. Manau, kad tinkama pataisa būtų „išjungti“ (išjungus puslapį neleidžiama jo išspausdinti) kiekvieną prikabinamą puslapį prieš jį perrašant, siekiant užtikrinti, kad puslapis niekada neįvyktų, taigi ir kodo kelias, susijęs su problema nesukelia, iki šiol bandžiau daugybę dalykų, bet atrodo, kad tiesiog neįmanoma gauti tokio laidų iš vartotojo erdvės, todėl tai turi būti padaryta branduolio viduje. Deja, struktūros, susijusios su šiuo konkrečiu bendru atvaizdavimu, dėl kurio kyla problema, yra labai sudėtingos ir aš dar turiu rasti būdą, kaip gauti tinkamą puslapio objektą, prie kurio būtų galima prijungti laidus.

„Spinlock Timeout Panic“ problema kilo nuo tada, kai pirmą kartą buvo prieinamas dopaminas, ir ji išlieka iki šiol nepaisant daugybės bandymų išspręsti problemą. Tai pasakius, dialogo atvėrimas, kad daugiau žmonių galėtų pamatyti ir prie jo prisidėti, yra teisingas žingsnis į priekį, nes taip daugiau žmonių lengviau sprendžia problemą ir galimą sprendimą.

Fröder paaiškina kitą jų idėją, kaip bandyti sužlugdyti problemą tolesniame komentare:

Taigi kitas žingsnis bandant tai pataisyti būtų branduolio atmintyje rasti DSC puslapio struktūrą vm_page, kol kas visi mano bandymai rasti tokią struktūrą buvo nesėkmingi.

Nors tai dar man nepadarė tiesioginės įtakos, iš tiesų bus įdomu pamatyti, ar Fröder sugebės išspręsti Spinlock Timeout Panic problemą. Atrodo, kad jis labiau paplitęs vartotojams, kurie įdiegia daugiau jailbreak pakeitimų, kurie sujungia C funkcijas. Gali būti, kad mano bandomajame įrenginyje nėra įdiegtų daug pataisymų, kurie išprovokuotų problemą, bet žinau, kad yra daug laužytojų, kurie įdiegia daugybę jailbreak patobulinimai – daugiau nei kada nors daryčiau.

Taip pat žiūrėkite: Kaip sugadinti A12-A15 įrenginius, kuriuose veikia iOS ir iPadOS 15.0-15.4.1 su Dopamine

Ar jus kada nors paveikė „Spinlock Timeout Panic“, apibūdinamas kaip rožinis ekranas prieš staigų paleidimą iš naujo naudojant Dopamino jailbreak? Praneškite mums žemiau esančiame komentarų skyriuje.

Top