<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

Google在一個函數中放入2萬個變量引發Firefox大崩潰

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

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

經過調查,Mozilla 最后發現這個問題并非由 Firefox 本身引起,而是涉及到 Linux 內核和 Google 的 JavaScript 代碼。

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

后續的持續檢測發現,這個問題影響了幾乎所有基于舊版本 Debian 的發行版。

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

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

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

Mozilla 隨后開始分析 Firefox 在崩潰時的行為,發現崩潰發生在堆棧探測期間。

JIT 觸及了為下一個 JavaScript 調用保存變量的區域,并不知為何導致了溢出。

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

進一步分析發現,這個函數可能是由 AI 生成的代碼。

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

在執行此操作之前,我們進行了堆棧檢查并驗證了我們分配的額外堆棧內存量不會溢出我們為自己設置的本機堆棧限制。

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

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

隨后 Mozilla 團隊將檢查重點放在了 Linux 內核上,結果發現 Linux 內核曾經有一個檢查,可以防止對堆棧的訪問離堆棧指針太遠。

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

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

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






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux系統
    +關注

    關注

    4

    文章

    573

    瀏覽量

    26967
  • LINUX內核
    +關注

    關注

    1

    文章

    312

    瀏覽量

    21408
  • Debian
    +關注

    關注

    0

    文章

    71

    瀏覽量

    1031

原文標題:Google在一個函數中放入2萬個變量,引發Firefox大崩潰

文章出處:【微信號:OSC開源社區,微信公眾號:OSC開源社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    XC8調用函數后局域變量值被改變是怎么回事呀!

    最近發現問題,有函數里邊調用別的函數后老出錯,查找程序沒有問題,經過仿真后發現在調用個子函數
    發表于 04-30 15:33

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

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

    如何處理STM32的HAL庫函數返回異常問題?

    (1)官方提供的例程里面,例如返回的結果不是 HAL_OK 的結果,般直接跳轉到 錯誤處理的函數里面了。這樣寫的目的是給開發者根據實際情況自己寫異常處理代碼。 (2)比較現實是,
    發表于 04-17 06:39

    C語言中的三種形式變量

    局部變量是在一個函數、代碼塊內部聲明的變量,只能被該函數或者代碼塊內部應用。局部變量函數之外不
    發表于 03-11 17:34 ?204次閱讀
    C語言中的三種形式<b class='flag-5'>變量</b>

    函數指針與回調函數的應用實例

    通常我們說的指針變量是指向一個整型、字符型或數組等變量,而函數指針是指向函數。 函數指針可以像一般
    的頭像 發表于 03-07 11:13 ?194次閱讀
    <b class='flag-5'>函數</b>指針與回調<b class='flag-5'>函數</b>的應用實例

    TC2XX現在看的擦除函數都是扇區扇區擦除的,如何實現按頁擦除?

    TC2XX現在看的擦除函數都是扇區扇區擦除的,如何實現按頁擦除?
    發表于 02-18 07:51

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

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

    LabVIEW調用image.cpp或drawmgr.cpp因為DAbort而崩潰

    需要時加載選板以嘗試減輕崩潰。 \user.lib目錄中刪除不必要的庫。LabVIEW會為每個選板圖像使用 GDI 對象,因此具有
    發表于 12-01 18:57

    函數返回的類型是枚舉,能不能將此狀態賦值給char呢?

    函數返回的類型是枚舉類型,現在我另外的子程序中調用了這個
    發表于 11-10 06:11

    stc51單片機程序存儲區不夠用,可否程序存儲區寫bootloader,用戶程序放入自身的EEPROM?

    stc51單片機程序存儲區不夠用,可否程序存儲區寫bootloader,用戶程序放入自身的EEPROM?如何實現?
    發表于 11-09 07:09

    求助,關于const char *p參數的函數和中斷賦值的問題

    假設帶有 const char *p參數的函數 在此函數中 p指向全局
    發表于 11-09 06:05

    keil5 debug的時候,如何查看具體的變量?

    keil5 debug的時候,如何查看具體的變量,而且讓這個變量能實時更新
    發表于 11-01 06:24

    怎么快速進行變量函數的命名?

    enum(枚舉)類型,前綴使用“e”+枚舉變量名,其成員前綴為枚舉變量或者其縮寫;struct(結構體)類型,前綴使用“s”+結構體變量名,其成員和變量定義規則相同;union(聯合)
    發表于 08-18 10:30 ?247次閱讀

    Mozilla檢測到Firefox出現了大量崩潰事件

    這些崩潰事件發生的十分突然,一開始 Mozilla 檢測到數以千計使用一個名為 Huayra 的 Debian 發行版的用戶受到影響,特別是 Huayra 5(基于 Debian 10)。后續的持續檢測發現,這個問題影響了幾乎所有基于舊版本 Debian 的發行版。
    的頭像 發表于 08-07 16:33 ?657次閱讀
    Mozilla檢測到<b class='flag-5'>Firefox</b>出現了大量<b class='flag-5'>崩潰</b>事件

    static的全局變量與局部變量的使用,看完你就懂了

    時,編譯器為它在棧上分配空間,函數棧上分配的空間在此函數執行結束時會釋放掉,這樣就產生了問題: 如果想將
    發表于 06-27 08:54
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>