近日,Mozilla 檢測(cè)到 Firefox 出現(xiàn)了大量崩潰事件,這個(gè)問題主要發(fā)生在使用 Linux 系統(tǒng)的用戶身上,尤其是使用基于舊版本 Debian 的 Linux 系統(tǒng)上。
經(jīng)過調(diào)查,Mozilla 最后發(fā)現(xiàn)這個(gè)問題并非由 Firefox 本身引起,而是涉及到 Linux 內(nèi)核和 Google 的 JavaScript 代碼。
這些崩潰事件發(fā)生的十分突然,一開始 Mozilla 檢測(cè)到數(shù)以千計(jì)使用一個(gè)名為 Huayra 的 Debian 發(fā)行版的用戶受到影響,特別是 Huayra 5(基于 Debian 10)。
后續(xù)的持續(xù)檢測(cè)發(fā)現(xiàn),這個(gè)問題影響了幾乎所有基于舊版本 Debian 的發(fā)行版。
崩潰事件也并不是隨機(jī)發(fā)生,而是能夠 100% 復(fù)現(xiàn)。用戶只要在 Google 上搜索圖片 Firefox 就會(huì)出現(xiàn)崩潰,這個(gè)問題影響了所有版本的 Firefox 瀏覽器 —— 無論是最新版本還是非常老的版本,都會(huì)崩潰。
結(jié)合上面兩個(gè)條件,Mozilla 的研究人員認(rèn)定這個(gè)問題不是由 Firefox 這邊引發(fā)的,問題應(yīng)該是出在 Google 和舊版 Linux 那邊,并開始分析這個(gè)問題發(fā)生的原因。
Mozilla 隨后開始分析 Firefox 在崩潰時(shí)的行為,發(fā)現(xiàn)崩潰發(fā)生在堆棧探測(cè)期間。
JIT 觸及了為下一個(gè) JavaScript 調(diào)用保存變量的區(qū)域,并不知為何導(dǎo)致了溢出。
第一個(gè)奇怪的地方在于,Mozilla 發(fā)現(xiàn) Google 最近對(duì)其圖像搜索頁面進(jìn)行了更改,該頁面現(xiàn)在有一個(gè) JS 函數(shù),Google 在這個(gè)單獨(dú)的函數(shù)中分配了 20000 個(gè)變量。
進(jìn)一步分析發(fā)現(xiàn),這個(gè)函數(shù)可能是由 AI 生成的代碼。
雖然發(fā)現(xiàn)了有這樣的問題,不過理論上 Firefox 應(yīng)該依然不會(huì)出現(xiàn)崩潰才對(duì),因?yàn)?Linux 會(huì)自動(dòng)擴(kuò)展堆棧,Mozilla 團(tuán)隊(duì)也已經(jīng)預(yù)留了足夠的空間,隨后他們通過查看受影響進(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ì)堆棧的訪問離堆棧指針太遠(yuǎn)。
特別是在 64KiB+256 字節(jié)以外的訪問會(huì)產(chǎn)生崩潰,而不是擴(kuò)展堆棧。
這個(gè)問題在 Linux 4.20 中被修復(fù)了,所以使用較新的發(fā)行版的用戶不受影響。
根據(jù)測(cè)試,Google 似乎已經(jīng)在圖片搜索中修復(fù)了這個(gè)問題,不過 Mozilla 仍然在著手研究解決方案,看看是否能為還在使用老系統(tǒng)的用戶一勞永逸解決這個(gè)問題,以免未來發(fā)生同樣的情況。
審核編輯:劉清
-
Linux系統(tǒng)
+關(guān)注
關(guān)注
4文章
596瀏覽量
27524 -
LINUX內(nèi)核
+關(guān)注
關(guān)注
1文章
316瀏覽量
21749 -
Debian
+關(guān)注
關(guān)注
0文章
75瀏覽量
1253
原文標(biāo)題:Google在一個(gè)函數(shù)中放入2萬個(gè)變量,引發(fā)Firefox大崩潰
文章出處:【微信號(hào):OSC開源社區(qū),微信公眾號(hào):OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
Steam歷史罕見大崩潰!近60個(gè)僵尸網(wǎng)絡(luò),DDoS攻擊暴漲2萬倍
![Steam歷史罕見大<b class='flag-5'>崩潰</b>!近60<b class='flag-5'>個(gè)</b>僵尸網(wǎng)絡(luò),DDoS攻擊暴漲<b class='flag-5'>2</b><b class='flag-5'>萬</b>倍](https://file1.elecfans.com//web2/M00/04/4A/wKgZombNPZWAHKXQAAEJFKh28KU774.png)
sdk調(diào)用sprintf函數(shù)時(shí),系統(tǒng)就會(huì)崩潰,為什么?
在PyTorch中搭建一個(gè)最簡(jiǎn)單的模型
與屏幕一起發(fā)送的第一個(gè)UART數(shù)據(jù)時(shí)出現(xiàn)初始崩潰,但僅在第一次閃存時(shí)出現(xiàn),為什么?
使用google-translate和wwe合并后無法使用google-tts怎么解決?
XC8調(diào)用函數(shù)后局域變量值被改變是怎么回事呀!
IAR仿真時(shí)崩潰了怎么解決?
13代及14代酷睿i9系列高端CPU游戲崩潰問題引發(fā)關(guān)注
淺談C語言中的函數(shù)定義
函數(shù)指針與回調(diào)函數(shù)的應(yīng)用實(shí)例
![<b class='flag-5'>函數(shù)</b>指針與回調(diào)<b class='flag-5'>函數(shù)</b>的應(yīng)用實(shí)例](https://file1.elecfans.com/web2/M00/C3/DE/wKgaomXpMS-ACUL9AAATEEgWdW4225.jpg)
評(píng)論