0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Google在一個(gè)函數(shù)中放入2萬(wàn)個(gè)變量引發(fā)Firefox大崩潰

OSC開(kāi)源社區(qū) ? 來(lái)源:OSC開(kāi)源社區(qū) ? 2023-06-26 16:58 ? 次閱讀

近日,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ā)生的原因。

40b175c4-1349-11ee-962d-dac502259ad0.png

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ā)生同樣的情況。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 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)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Steam歷史罕見(jiàn)大崩潰!近60個(gè)僵尸網(wǎng)絡(luò),DDoS攻擊暴漲2萬(wàn)

    實(shí)驗(yàn)室分析,此次攻擊異常猛烈,源頭涉及近60個(gè)僵尸網(wǎng)絡(luò)主控,攻擊指令夜之間激增超2萬(wàn)倍,波及全球13個(gè)國(guó)家和地區(qū)的107
    的頭像 發(fā)表于 08-27 10:44 ?244次閱讀
    Steam歷史罕見(jiàn)大<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'>萬(wàn)</b>倍

    python函數(shù)萬(wàn)能參數(shù)

    我們通過(guò)個(gè)簡(jiǎn)單的事例來(lái)展示函數(shù)萬(wàn)能參數(shù),我們先寫(xiě)個(gè)
    的頭像 發(fā)表于 07-17 14:56 ?294次閱讀
    python<b class='flag-5'>函數(shù)</b>的<b class='flag-5'>萬(wàn)</b>能參數(shù)

    C語(yǔ)言中的三種形式變量

    局部變量個(gè)函數(shù)、代碼塊內(nèi)部聲明的變量,只能被該函數(shù)
    發(fā)表于 03-11 17:34 ?468次閱讀
    C語(yǔ)言中的三種形式<b class='flag-5'>變量</b>

    函數(shù)指針與回調(diào)函數(shù)的應(yīng)用實(shí)例

    通常我們說(shuō)的指針變量是指向個(gè)整型、字符型或數(shù)組等變量,而函數(shù)指針是指向函數(shù)。
    的頭像 發(fā)表于 03-07 11:13 ?361次閱讀
    <b class='flag-5'>函數(shù)</b>指針與回調(diào)<b class='flag-5'>函數(shù)</b>的應(yīng)用實(shí)例

    個(gè)輕量級(jí)的LED控制模塊

    比如LED周期控制函數(shù)為100ms,理論上設(shè)置500ms間隔閃爍,則需要占用10個(gè)bit,但是增加個(gè)bit時(shí)間顆粒度變量,只需要占用兩
    發(fā)表于 02-29 11:43 ?470次閱讀

    程序中增加個(gè)變量導(dǎo)致異常的分析

    大家平常的編程過(guò)程應(yīng)該會(huì)碰到各種奇葩的問(wèn)題吧,反正我最近是碰到了次,再此跟大家分享下。事情的原因是我程序中增加了
    的頭像 發(fā)表于 01-22 09:56 ?494次閱讀
    程序中增加<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b><b class='flag-5'>變量</b>導(dǎo)致異常的分析

    softune如何把個(gè)變量定義指定RAM地址?

    你好,請(qǐng)問(wèn)如何把個(gè)變量定義指定RAM地址? 例如把 i 變量定義 RAM地址 0x0200
    發(fā)表于 01-18 10:48

    函數(shù)指針和指針函數(shù)是不是個(gè)東西?

    函數(shù)指針的本質(zhì)是指針,就跟整型指針、字符指針樣,函數(shù)指針指向的是個(gè)函數(shù)。
    的頭像 發(fā)表于 01-03 16:35 ?490次閱讀
    <b class='flag-5'>函數(shù)</b>指針和指針<b class='flag-5'>函數(shù)</b>是不是<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>東西?

    什么是電壓崩潰?產(chǎn)生電壓崩潰的原因

    探討電壓崩潰的原因以及可能的解決方案。 第部分:電壓崩潰的原因 1. 電源故障:電源崩潰是導(dǎo)致電壓崩潰的最常見(jiàn)原因之
    的頭像 發(fā)表于 12-20 17:05 ?1721次閱讀

    if函數(shù)個(gè)條件怎么填

    IF函數(shù)是Excel中最常用的函數(shù),它根據(jù)個(gè)邏輯條件的返回結(jié)果來(lái)決定應(yīng)該執(zhí)行哪一個(gè)動(dòng)作。
    的頭像 發(fā)表于 12-03 10:28 ?3404次閱讀

    vlookup函數(shù)的四個(gè)參數(shù)含義

    VLOOKUP函數(shù)種用于Excel中查找和提取數(shù)據(jù)的功能強(qiáng)大的函數(shù)。它的四個(gè)參數(shù)含義分別是:查找值、查找范圍、返回列索引和區(qū)域或表標(biāo)志
    的頭像 發(fā)表于 12-01 09:57 ?6838次閱讀

    sumif函數(shù)個(gè)條件怎么填

    SUMIF函數(shù)種非常常用的Excel函數(shù),它用于根據(jù)給定的條件,相應(yīng)的區(qū)域內(nèi)求和。SUMIF函數(shù)可以通過(guò)設(shè)置
    的頭像 發(fā)表于 11-30 16:38 ?5171次閱讀

    個(gè)c源程序至少包括個(gè)函數(shù)

    個(gè)C源程序至少包括個(gè)函數(shù)。 C語(yǔ)言是種廣泛應(yīng)用于嵌入式系統(tǒng)和操作系統(tǒng)的程序設(shè)計(jì)語(yǔ)言。它的基
    的頭像 發(fā)表于 11-26 09:01 ?1036次閱讀

    python里怎么寫(xiě)個(gè)數(shù)的立方

    Python中,我們可以使用運(yùn)算符和函數(shù)來(lái)計(jì)算數(shù)的立方。下面我將詳細(xì)介紹如何使用這些方法來(lái)實(shí)現(xiàn)這個(gè)功能。 首先,我們可以使用乘法運(yùn)算符 ** 來(lái)計(jì)算個(gè)數(shù)的立方。例如,如果我們有
    的頭像 發(fā)表于 11-21 16:47 ?3275次閱讀

    python如何定義個(gè)函數(shù)

    ()。但你也可以自己創(chuàng)建函數(shù),這被叫做用戶自定義函數(shù)。 二、定義個(gè)函數(shù) 你可以定義
    的頭像 發(fā)表于 11-14 11:26 ?671次閱讀