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

    文章

    593

    浏览量

    27392
  • LINUX内核
    +关注

    关注

    1

    文章

    316

    浏览量

    21644
  • Debian
    +关注

    关注

    0

    文章

    75

    浏览量

    1162

原文标题:Google在一个函数中放入2万个变量,引发Firefox大崩溃

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Steam历史罕见大崩溃!近60僵尸网络,DDoS攻击暴涨2

    实验室分析,此次攻击异常猛烈,源头涉及近60僵尸网络主控,攻击指令夜之间激增超2倍,波及全球13国家和地区的107
    的头像 发表于 08-27 10:44 279次阅读
    Steam历史罕见大<b class='flag-5'>崩溃</b>!近60<b class='flag-5'>个</b>僵尸网络,DDoS攻击暴涨<b class='flag-5'>2</b><b class='flag-5'>万</b>倍

    python函数能参数

    我们通过简单的事例来展示函数能参数,我们先写
    的头像 发表于 07-17 14:56 330次阅读
    python<b class='flag-5'>函数</b>的<b class='flag-5'>万</b>能参数

    与屏幕起发送的第一个UART数据时出现初始崩溃,但仅在第次闪存时出现,为什么?

    其他人在闪烁并发送 UART 数据字符后遇到此问题,导致以下问题,我刷新芯片并崩溃后,我手动重置它后,它工作正常,完全没有问题,但是
    发表于 07-09 07:39

    IAR仿真时崩溃了怎么解决?

    发现IAR有BUG,程序中定义unsigned char型的变量,如果在代码中给变量赋某些值(比如0xEC,0xE0),
    发表于 04-22 07:57

    13代及14代酷睿i9系列高端CPU游戏崩溃问题引发关注

    4 月 10 日讯,亚马逊 ZDNet Korea 报告指出,近期多名电脑用户采用英特尔第 13 和 14 代酷睿 i9 高端处理器玩游戏时遇到了崩溃现象,如代南梦宫游戏《铁拳 8》PC 演示版虽然配备较大的内存和显存,但仍
    的头像 发表于 04-10 10:08 2151次阅读

    C语言中的三种形式变量

    局部变量函数、代码块内部声明的变量,只能被该函数
    发表于 03-11 17:34 684次阅读
    C语言中的三种形式<b class='flag-5'>变量</b>

    函数指针与回调函数的应用实例

    通常我们说的指针变量是指向整型、字符型或数组等变量,而函数指针是指向函数
    的头像 发表于 03-07 11:13 400次阅读
    <b class='flag-5'>函数</b>指针与回调<b class='flag-5'>函数</b>的应用实例

    轻量级的LED控制模块

    比如LED周期控制函数为100ms,理论上设置500ms间隔闪烁,则需要占用10bit,但是增加bit时间颗粒度变量,只需要占用两
    发表于 02-29 11:43 566次阅读

    output函数怎么用

    output 函数通用的术语,并不特指某个具体的编程语言或软件工具。 如果你使用 Python 编程语言,那么可能是指 print 函数
    的头像 发表于 02-23 14:21 1248次阅读

    Mozilla发布Firefox 123.0稳定版,新添网站兼容性报告工具

    2023年2月20日,Mozilla发布Firefox 123.0稳定版及115.9 ESR版本,并更迭Beta、Dev、Nightly三开发频道版本至124、125;手机版Firefox
    的头像 发表于 02-20 15:45 666次阅读

    arm三寄存器gdb调试时的作用

    的ARM寄存器(r0、r1和r2)的作用非常重要。 1. R0寄存器: R0寄存器是ARM处理器中的通用寄存器。它用于传递函数参数和保存返回值。当我们调用
    的头像 发表于 01-31 10:44 975次阅读

    Firefox长达21年的 “陈年老bug”,终于被修复了!

    Firefox 的工单记录页面显示, 21 年前发现的 bug 终于被修复了。
    的头像 发表于 01-25 11:08 398次阅读
    <b class='flag-5'>Firefox</b>长达21年的 “陈年老bug”,终于被修复了!

    程序中增加变量导致异常的分析

    大家平常的编程过程应该会碰到各种奇葩的问题吧,反正我最近是碰到了次,再此跟大家分享下。事情的原因是我程序中增加了
    的头像 发表于 01-22 09:56 567次阅读
    程序中增加<b class='flag-5'>一</b><b class='flag-5'>个</b><b class='flag-5'>变量</b>导致异常的分析

    softune如何把变量定义指定RAM地址?

    你好,请问如何把变量定义指定RAM地址? 例如把 i 变量定义 RAM地址 0x0200
    发表于 01-18 10:48

    函数指针和指针函数是不是东西?

    函数指针的本质是指针,就跟整型指针、字符指针样,函数指针指向的是函数
    的头像 发表于 01-03 16:35 526次阅读
    <b class='flag-5'>函数</b>指针和指针<b class='flag-5'>函数</b>是不是<b class='flag-5'>一</b><b class='flag-5'>个</b>东西?