近日,Mozilla 檢測(cè)到 Firefox 出現(xiàn)了大量崩潰事件,這個(gè)問(wèn)題主要發(fā)生在使用 Linux 系統(tǒng)的用戶身上,尤其是使用基于舊版本 Debian 的 Linux 系統(tǒng)上。
經(jīng)過(guò)調(diào)查,Mozilla 最后發(fā)現(xiàn)這個(gè)問(wèn)題并非由 Firefox 本身引起,而是涉及到 Linux 內(nèi)核和 Google 的 JavaScript 代碼。
這些崩潰事件發(fā)生的十分突然,一開(kāi)始 Mozilla 檢測(cè)到數(shù)以千計(jì)使用一個(gè)名為 Huayra 的 Debian 發(fā)行版的用戶受到影響,特別是 Huayra 5(基于 Debian 10)。
后續(xù)的持續(xù)檢測(cè)發(fā)現(xiàn),這個(gè)問(wèn)題影響了幾乎所有基于舊版本 Debian 的發(fā)行版。
崩潰事件也并不是隨機(jī)發(fā)生,而是能夠 100% 復(fù)現(xiàn)。用戶只要在 Google 上搜索圖片 Firefox 就會(huì)出現(xiàn)崩潰,這個(gè)問(wèn)題影響了所有版本的 Firefox 瀏覽器 —— 無(wú)論是最新版本還是非常老的版本,都會(huì)崩潰。
結(jié)合上面兩個(gè)條件,Mozilla 的研究人員認(rèn)定這個(gè)問(wèn)題不是由 Firefox 這邊引發(fā)的,問(wèn)題應(yīng)該是出在 Google 和舊版 Linux 那邊,并開(kāi)始分析這個(gè)問(wèn)題發(fā)生的原因。
Mozilla 隨后開(kāi)始分析 Firefox 在崩潰時(shí)的行為,發(fā)現(xiàn)崩潰發(fā)生在堆棧探測(cè)期間。
JIT 觸及了為下一個(gè) JavaScript 調(diào)用保存變量的區(qū)域,并不知為何導(dǎo)致了溢出。
第一個(gè)奇怪的地方在于,Mozilla 發(fā)現(xiàn) Google 最近對(duì)其圖像搜索頁(yè)面進(jìn)行了更改,該頁(yè)面現(xiàn)在有一個(gè) JS 函數(shù),Google 在這個(gè)單獨(dú)的函數(shù)中分配了 20000 個(gè)變量。
進(jìn)一步分析發(fā)現(xiàn),這個(gè)函數(shù)可能是由 AI 生成的代碼。
雖然發(fā)現(xiàn)了有這樣的問(wèn)題,不過(guò)理論上 Firefox 應(yīng)該依然不會(huì)出現(xiàn)崩潰才對(duì),因?yàn)?Linux 會(huì)自動(dòng)擴(kuò)展堆棧,Mozilla 團(tuán)隊(duì)也已經(jīng)預(yù)留了足夠的空間,隨后他們通過(guò)查看受影響進(jìn)程的內(nèi)存確認(rèn)了這一點(diǎn)。
在執(zhí)行此操作之前,我們進(jìn)行了堆棧檢查并驗(yàn)證了我們分配的額外堆棧內(nèi)存量不會(huì)溢出我們?yōu)樽约涸O(shè)置的本機(jī)堆棧限制。
因此,似乎存在我們自我施加的限制與操作系統(tǒng)限制之間的分歧。
這在某種程度上取決于發(fā)行版,但很混亂:例如,它影響 Debian 10 但不影響 Debian 11。
隨后 Mozilla 團(tuán)隊(duì)將檢查重點(diǎn)放在了 Linux 內(nèi)核上,結(jié)果發(fā)現(xiàn) Linux 內(nèi)核曾經(jīng)有一個(gè)檢查,可以防止對(duì)堆棧的訪問(wèn)離堆棧指針太遠(yuǎn)。
特別是在 64KiB+256 字節(jié)以外的訪問(wèn)會(huì)產(chǎn)生崩潰,而不是擴(kuò)展堆棧。
這個(gè)問(wèn)題在 Linux 4.20 中被修復(fù)了,所以使用較新的發(fā)行版的用戶不受影響。
根據(jù)測(cè)試,Google 似乎已經(jīng)在圖片搜索中修復(fù)了這個(gè)問(wèn)題,不過(guò) Mozilla 仍然在著手研究解決方案,看看是否能為還在使用老系統(tǒng)的用戶一勞永逸解決這個(gè)問(wèn)題,以免未來(lái)發(fā)生同樣的情況。
審核編輯:劉清
-
Linux系統(tǒng)
+關(guān)注
關(guān)注
4文章
590瀏覽量
27318 -
LINUX內(nèi)核
+關(guān)注
關(guān)注
1文章
316瀏覽量
21608 -
Debian
+關(guān)注
關(guān)注
0文章
74瀏覽量
1127
原文標(biāo)題:Google在一個(gè)函數(shù)中放入2萬(wàn)個(gè)變量,引發(fā)Firefox大崩潰
文章出處:【微信號(hào):OSC開(kāi)源社區(qū),微信公眾號(hào):OSC開(kāi)源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論