多巴胺越獄開發人員討論難以捉摸的自旋鎖超時恐慌問題

多巴胺越獄開發人員討論難以捉摸的自旋鎖超時恐慌問題

適用於運行 iOS 和 iPadOS 15.0-15.4.1 的 A12-A15 裝置的Dopamine越獄工具是目前適用於任何比 iPhone X 更新的裝置的最新越獄工具。話雖如此,它成為當今越獄者的熱門選擇也就不足為奇了。

Lars Fröder 在 GitHub 頁面上發布了有關多巴胺越獄中的 Spinlock Timeout Panics 的推文。

但是,如果您自專案啟動以來一直在使用 Dopamine 或關注該項目,那麼您可能會多次聽到專案首席開發人員 Lars Fröder (@opa334dev) 和使用者類似的某個字詞:Spinlock。

事實上,有一個已知的問題會影響多巴胺越獄,稱為“自旋鎖超時恐慌”,它最終會導致用戶的設備顯示粉紅色螢幕,然後以看似無端的方式重新啟動。該問題已用技術術語描述如下:

dyld_shared_cache 可執行頁面頂部的映射似乎會觸發 PPL 中的邊緣情況行為,有時會導致記憶體頁面的自旋鎖定逾時,從而導致核心恐慌。

安裝的掛鉤 C 函數的調整越多,注入的進程就越多,觸發這種行為的頻率就越高。

看來這個問題可以透過連接所有已掛鉤的頁面來解決,但使用者空間無法取得這樣的鎖,並且在核心記憶體中找到 vm_page 物件來直接翻轉連接位元被證明是困難的。

由於我個人從未在我的多巴胺設備上經歷過這些問題之一,因此很難解釋它的外觀或何時發生,但我確實與Fröder 進行了交談,詢問他們認為可能導致它的原因更多地了解他們正在嘗試解決這個問題。

Fröder 的回應對於像我這樣的非技術人員以及越獄社區中的許多其他人來說很有洞察力,並且已發佈到GitHub 問題頁面供公眾查看。以下引用的完整回應揭示了 Fröder 對 Spinlock Timeout Panic 問題的理解:

這是對這個問題的更深入的解釋,以我目前對它的最佳理解。請記住,它是基於基本上無法驗證的假設。

因此,在多執行緒系統中,「鎖」用於防止兩個執行緒相互幹擾。這樣,一個執行緒就可以取得鎖、進行修改並解鎖。鎖定時,嘗試取得鎖定的另一個執行緒將等待,直到該物件再次解鎖。

自旋鎖本質上是相同的東西,只是用於與性能相關的東西,主要區別在於,如果在另一個線程嘗試獲取鎖時某些東西佔用鎖的時間太長,則自旋鎖可能會超時。因此,當獲取鎖定並且物件已經被鎖定時,它將等待幾個週期,如果物件在該時間範圍內沒有解鎖,它將逾時。

這種機製本身不是問題,問題與記憶體頁面有關。每個記憶體頁面(描述了 16kB RAM 的區域)都有一個自旋鎖,因此當多個進程嘗試同時獲取同一頁面時不會出現問題。

特定頁面可以對應到多個進程(例如,如果兩個進程都載入相同的庫),它們會重複使用相同的頁面以節省記憶體。調整者希望在每個進程的基礎上覆蓋此類內存,因此他們必須首先製作現有映射的特定於進程的副本,並將其映射到其頂部,以便可以在一個進程中修改一個頁面,同時保留庫存在其他過程。當映射到位於 dyld_shared_cache 內的頁面頂部時,該問題似乎特別發生。

現在的問題是,Apple 可能從未測試過這種掛鉤,顯然當您在許多進程中執行此操作時,它可能會導致原始頁面(共享映射之一)被換出,因為它沒有被積極使用。調出頁面本質上是將其從 RAM 中刪除,當再次訪問該頁面時,它將再次加載。在庫存系統上,這種情況不會發生,因為沒有任何東西被掛鉤。

現在,根本原因似乎是試圖將先前調出的共享/可執行頁面重新調入,這會觸發搶佔問題,其中一個線程獲取自旋鎖,並且當它擁有該自旋鎖時,它會被搶占到另一個上下文,該上下文也獲取了自旋鎖。相同的自旋鎖(搶佔本質上是一種機制,允許一個線程用於其他事情,即使它當前很忙,如果有一段程式碼應該始終一次性執行,則程式碼必須明確停用並重新啟用它) 。因此,似乎有一個程式碼路徑僅從這種特定行為中調用,其中Apple沒有正確禁用搶佔,導致一個線程兩次使用相同的自旋鎖,這使得它超時,因為舊的上下文不再執行,並且無法再次解鎖自旋鎖。

自多巴胺首次可用以來,自旋鎖超時恐慌問題就一直存在,儘管多次嘗試解決該問題,但至今仍持續存在。話雖如此,開放對話讓更多人看到並做出貢獻是正確的一步,因為它使更多人更容易就問題和可能的解決方案進行集思廣益。

Fröder 在後續評論中解釋了他們試圖阻止問題的下一個想法:

因此,嘗試修復此問題的下一步是在核心記憶體中尋找 DSC 頁的 vm_page 結構,到目前為止,我所有查找此類結構的嘗試都失敗了。

雖然它還沒有直接影響到我,但看看 Fröder 是否能夠解決 Spinlock Timeout Panic 問題確實很有趣。對於安裝了更多掛鉤 C 函數的越獄調整的使用者來說,這種情況似乎更為普遍。可能只是因為我的測試設備上沒有安裝太多的調整來觸發這個問題,但我知道有很多越獄者安裝了大量的越獄調整- 比以前安裝的還要多。

另請參閱: 如何使用 Dopamine 對運行 iOS 和 iPadOS 15.0-15.4.1 的 A12-A15 裝置進行越獄

在使用多巴胺越獄時,您是否曾受到「旋轉鎖超時恐慌」(Spinlock Timeout Panic)的影響,該恐慌被描述為在突然重新啟動之前出現粉紅色螢幕?請在下面的評論部分告訴我們。


Warning: Undefined variable $html_req in /var/www/vhosts/4pmtech.com/httpdocs/wp-content/themes/fourpmtech/comments.php on line 79

Warning: Undefined variable $html5 in /var/www/vhosts/4pmtech.com/httpdocs/wp-content/themes/fourpmtech/comments.php on line 82

Warning: Undefined variable $html_req in /var/www/vhosts/4pmtech.com/httpdocs/wp-content/themes/fourpmtech/comments.php on line 82

Warning: Undefined variable $consent in /var/www/vhosts/4pmtech.com/httpdocs/wp-content/themes/fourpmtech/comments.php on line 86

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


Warning: Undefined array key "url" in /var/www/vhosts/4pmtech.com/httpdocs/wp-content/themes/fourpmtech/inc/template-functions.php on line 315