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

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

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

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

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

近日,Mozilla 檢測到 Firefox 出現(xiàn)了大量崩潰事件,這個問題主要發(fā)生在使用 Linux 系統(tǒng)的用戶身上,尤其是使用基于舊版本 Debian 的 Linux 系統(tǒng)上。

經(jīng)過調(diào)查,Mozilla 最后發(fā)現(xiàn)這個問題并非由 Firefox 本身引起,而是涉及到 Linux 內(nèi)核和 Google 的 JavaScript 代碼。

這些崩潰事件發(fā)生的十分突然,一開始 Mozilla 檢測到數(shù)以千計使用一個名為 Huayra 的 Debian 發(fā)行版的用戶受到影響,特別是 Huayra 5(基于 Debian 10)。

后續(xù)的持續(xù)檢測發(fā)現(xiàn),這個問題影響了幾乎所有基于舊版本 Debian 的發(fā)行版。

崩潰事件也并不是隨機發(fā)生,而是能夠 100% 復(fù)現(xiàn)。用戶只要在 Google 上搜索圖片 Firefox 就會出現(xiàn)崩潰,這個問題影響了所有版本的 Firefox 瀏覽器 —— 無論是最新版本還是非常老的版本,都會崩潰。

結(jié)合上面兩個條件,Mozilla 的研究人員認定這個問題不是由 Firefox 這邊引發(fā)的,問題應(yīng)該是出在 Google 和舊版 Linux 那邊,并開始分析這個問題發(fā)生的原因。

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

Mozilla 隨后開始分析 Firefox 在崩潰時的行為,發(fā)現(xiàn)崩潰發(fā)生在堆棧探測期間。

JIT 觸及了為下一個 JavaScript 調(diào)用保存變量的區(qū)域,并不知為何導(dǎo)致了溢出。

第一個奇怪的地方在于,Mozilla 發(fā)現(xiàn) Google 最近對其圖像搜索頁面進行了更改,該頁面現(xiàn)在有一個 JS 函數(shù),Google 在這個單獨的函數(shù)中分配了 20000 個變量。

進一步分析發(fā)現(xiàn),這個函數(shù)可能是由 AI 生成的代碼。

雖然發(fā)現(xiàn)了有這樣的問題,不過理論上 Firefox 應(yīng)該依然不會出現(xiàn)崩潰才對,因為 Linux 會自動擴展堆棧,Mozilla 團隊也已經(jīng)預(yù)留了足夠的空間,隨后他們通過查看受影響進程的內(nèi)存確認了這一點。

在執(zhí)行此操作之前,我們進行了堆棧檢查并驗證了我們分配的額外堆棧內(nèi)存量不會溢出我們?yōu)樽约涸O(shè)置的本機堆棧限制。

因此,似乎存在我們自我施加的限制與操作系統(tǒng)限制之間的分歧。

這在某種程度上取決于發(fā)行版,但很混亂:例如,它影響 Debian 10 但不影響 Debian 11。

隨后 Mozilla 團隊將檢查重點放在了 Linux 內(nèi)核上,結(jié)果發(fā)現(xiàn) Linux 內(nèi)核曾經(jīng)有一個檢查,可以防止對堆棧的訪問離堆棧指針太遠。

特別是在 64KiB+256 字節(jié)以外的訪問會產(chǎn)生崩潰,而不是擴展堆棧。

這個問題在 Linux 4.20 中被修復(fù)了,所以使用較新的發(fā)行版的用戶不受影響。

根據(jù)測試,Google 似乎已經(jīng)在圖片搜索中修復(fù)了這個問題,不過 Mozilla 仍然在著手研究解決方案,看看是否能為還在使用老系統(tǒng)的用戶一勞永逸解決這個問題,以免未來發(fā)生同樣的情況。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux系統(tǒng)
    +關(guān)注

    關(guān)注

    4

    文章

    595

    瀏覽量

    27451
  • LINUX內(nèi)核
    +關(guān)注

    關(guān)注

    1

    文章

    316

    瀏覽量

    21688
  • Debian
    +關(guān)注

    關(guān)注

    0

    文章

    75

    瀏覽量

    1192

原文標(biāo)題:Google在一個函數(shù)中放入2萬個變量,引發(fā)Firefox大崩潰

文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

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

    實驗室分析,此次攻擊異常猛烈,源頭涉及近60僵尸網(wǎng)絡(luò)主控,攻擊指令夜之間激增超2倍,波及全球13國家和地區(qū)的107
    的頭像 發(fā)表于 08-27 10:44 ?312次閱讀
    Steam歷史罕見大<b class='flag-5'>崩潰</b>!近60<b class='flag-5'>個</b>僵尸網(wǎng)絡(luò),DDoS攻擊暴漲<b class='flag-5'>2</b><b class='flag-5'>萬</b>倍

    python函數(shù)能參數(shù)

    我們通過簡單的事例來展示函數(shù)能參數(shù),我們先寫
    的頭像 發(fā)表于 07-17 14:56 ?364次閱讀
    python<b class='flag-5'>函數(shù)</b>的<b class='flag-5'>萬</b>能參數(shù)

    PyTorch中搭建最簡單的模型

    PyTorch中搭建最簡單的模型通常涉及幾個關(guān)鍵步驟:定義模型結(jié)構(gòu)、加載數(shù)據(jù)、設(shè)置損失函數(shù)和優(yōu)化器,以及進行模型訓(xùn)練和評估。
    的頭像 發(fā)表于 07-16 18:09 ?2120次閱讀

    與屏幕起發(fā)送的第一個UART數(shù)據(jù)時出現(xiàn)初始崩潰,但僅在第次閃存時出現(xiàn),為什么?

    其他人在閃爍并發(fā)送 UART 數(shù)據(jù)字符后遇到此問題,導(dǎo)致以下問題,我刷新芯片并崩潰后,我手動重置它后,它工作正常,完全沒有問題,但是
    發(fā)表于 07-09 07:39

    IAR仿真時崩潰了怎么解決?

    發(fā)現(xiàn)IAR有BUG,程序中定義unsigned char型的變量,如果在代碼中給變量賦某些值(比如0xEC,0xE0),
    發(fā)表于 04-22 07:57

    13代及14代酷睿i9系列高端CPU游戲崩潰問題引發(fā)關(guān)注

    4 月 10 日訊,亞馬遜 ZDNet Korea 報告指出,近期多名電腦用戶采用英特爾第 13 和 14 代酷睿 i9 高端處理器玩游戲時遇到了崩潰現(xiàn)象,如代南夢宮游戲《鐵拳 8》PC 演示版雖然配備較大的內(nèi)存和顯存,但仍
    的頭像 發(fā)表于 04-10 10:08 ?2201次閱讀

    C語言中的三種形式變量

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

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

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

    輕量級的LED控制模塊

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

    output函數(shù)怎么用

    output 函數(shù)通用的術(shù)語,并不特指某個具體的編程語言或軟件工具。 如果你使用 Python 編程語言,那么可能是指 print 函數(shù)
    的頭像 發(fā)表于 02-23 14:21 ?1295次閱讀

    Mozilla發(fā)布Firefox 123.0穩(wěn)定版,新添網(wǎng)站兼容性報告工具

    2023年2月20日,Mozilla發(fā)布Firefox 123.0穩(wěn)定版及115.9 ESR版本,并更迭Beta、Dev、Nightly三開發(fā)頻道版本至124、125;手機版Firefox
    的頭像 發(fā)表于 02-20 15:45 ?707次閱讀

    arm三寄存器gdb調(diào)試時的作用

    的ARM寄存器(r0、r1和r2)的作用非常重要。 1. R0寄存器: R0寄存器是ARM處理器中的通用寄存器。它用于傳遞函數(shù)參數(shù)和保存返回值。當(dāng)我們調(diào)用
    的頭像 發(fā)表于 01-31 10:44 ?1045次閱讀

    Firefox長達21年的 “陳年老bug”,終于被修復(fù)了!

    Firefox 的工單記錄頁面顯示, 21 年前發(fā)現(xiàn)的 bug 終于被修復(fù)了。
    的頭像 發(fā)表于 01-25 11:08 ?432次閱讀
    <b class='flag-5'>Firefox</b>長達21年的 “陳年老bug”,終于被修復(fù)了!

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

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

    softune如何把變量定義指定RAM地址?

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