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

    文章

    596

    浏览量

    27542
  • LINUX内核
    +关注

    关注

    1

    文章

    316

    浏览量

    21767
  • Debian
    +关注

    关注

    0

    文章

    75

    浏览量

    1266

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    sdk调用sprintf函数时,系统就会崩溃,为什么?

    rtos版本的sdk,v1.0.4版本(1.0.3版本的也有同样的问题)。当我调用sprintf函数时,系统就会崩溃,打印信息如下: Fatal exception (222t▒,u): epc1
    发表于 07-18 07:14

    python函数能参数

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

    PyTorch中搭建最简单的模型

    PyTorch中搭建最简单的模型通常涉及几个关键步骤:定义模型结构、加载数据、设置损失函数和优化器,以及进行模型训练和评估。
    的头像 发表于 07-16 18:09 2237次阅读

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

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

    使用google-translate和wwe合并后无法使用google-tts怎么解决?

    我打算使用lyrat-mini做一个使用唤醒词唤醒然后后续通过google-sr和google-tts进行交流的聊天机器人,但是当我合并了adf的例子中的wwe和google-tran
    发表于 06-28 06:05

    XC8调用函数后局域变量值被改变是怎么回事呀!

    最近发现问题,有函数里边调用别的函数后老出错,查找程序没有问题,经过仿真后发现在调用个子函数
    发表于 04-30 15:33

    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 2293次阅读

    C语言中的三种形式变量

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

    浅谈C语言中的函数定义

    如果函数要使用参数,则必须声明接受参数值的变量。这些变量称为函数的形式参数。 形式参数就像函数内的其他局部
    发表于 03-11 10:09 463次阅读

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

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

    轻量级的LED控制模块

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

    output函数怎么用

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

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

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