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

    文章

    606

    浏览量

    28856
  • LINUX内核
    +关注

    关注

    1

    文章

    317

    浏览量

    22529
  • Debian
    +关注

    关注

    0

    文章

    77

    浏览量

    1756

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【原创】TDMS设置下一个写入位置函数的摸索

    开时,必须启用缓冲 3、必须先调用“tdms设置下一个写入位置”再调用高级tdms写入函数 4、写入函数完成后,必须使用高级tdms关闭,利用刷新是无用的 5、高级tdms打开函数,生
    发表于 08-11 20:54

    Google Fast Pair服务简介

    设备。多个Seeker设备可以拥有同一个Google Account 。Provider和第一个Seeker建立关联的过程称为initial pairing;Provider和第二
    发表于 06-29 19:28

    解锁LuatOS新世界:二次开发必备的3核心常识

    起来了解LuatOS开发需要熟悉的几个常识。 ? 、匿名函数 Lua代码里面,经常看到没有名字的函数。 这种函数定义之后,要么马上运行,
    的头像 发表于 06-23 16:08 ?106次阅读
    解锁LuatOS新世界:二次开发必备的3<b class='flag-5'>个</b>核心常识

    突破LuatOS开发瓶颈:三二次开发必备知识揭秘!

    。 ? 、匿名函数 Lua代码里面,经常看到没有名字的函数。 这种函数定义之后,要么马上运行,要么作为另
    的头像 发表于 06-23 15:05 ?112次阅读
    突破LuatOS开发瓶颈:三<b class='flag-5'>个</b>二次开发必备知识揭秘!

    如何避免存储示波器再次崩溃?

    为避免存储示波器再次崩溃,需从系统维护、硬件管理、操作规范和应急预案四维度构建完整的防护体系。以下是具体措施及实施要点:、系统与软件层面1. 固件与软件管理 定期更新固件 操作:每6
    发表于 05-23 14:47

    Google推出全新Cloud WAN解决方案

    202 接入点(PoP),由超过 200 英里的光纤和 33 条海底光缆提供支持,并有 99.99% 可靠性服务水平协议(SLA)作为后盾,Google 的网络提供了
    的头像 发表于 05-14 16:48 ?654次阅读

    函数指针的六常见应用场景

    函数指针嵌入式开发中有着广泛的应用,它让代码更加灵活,减少冗余,提高可扩展性。很多时候,我们需要根据不同的情况动态调用不同的函数,而函数指针正是实现这
    的头像 发表于 04-07 11:58 ?654次阅读
    <b class='flag-5'>函数</b>指针的六<b class='flag-5'>个</b>常见应用场景

    必看!15C语言常见陷阱及避坑指南

    ? C语言虽强大,但隐藏的“坑”也不少!稍不留神就会导致程序崩溃、数据异常。本文整理15高频陷阱,助你写出更稳健的代码! ? 陷阱1:运算符优先级混淆? 问题:运算符优先级不同可能导致计算顺序错误
    的头像 发表于 03-16 12:10 ?783次阅读

    关于STM32 CAN通信发送函数HAL_CAN_AddTxMessage()的最后参数填0和定义变量取地址的问题求解

    问题: 关于STM32 CAN通信 发送函数 HAL_CAN_AddTxMessage()的最后参数填0和定义
    发表于 03-11 08:22

    STM32H7 0x00000000地址的内容引发hardfault怎么解决?

    ;Init.Request)时引发hardfault。具体原因是因为变量huart(对应类型UART_HandleTypeDef)中未对hdmarx进行初始化,该指针变量指向0x00000000,但
    发表于 03-07 08:15

    TimSort:标准函数库中广泛使用的排序算法

    排序算法呢? 本文将带你走进 TimSort,标准函数库中广泛使用的排序算法。 这个算法由工程师 Tim Peters 于 2001 年专为 Python 设计,并自 Pytho
    的头像 发表于 01-03 11:42 ?668次阅读

    同样是函数,C和C++中有什么区别

    同样是函数 C 和 C++ 中有什么区别? 第一个返回值。 C语言的函数可以不写返回值类型,编译器会默认为返回 int。 但是 C++ 的函数
    的头像 发表于 11-29 10:25 ?983次阅读

    C++新手容易犯的十编程错误

    简单的总结下?C++ 新手容易犯的些编程错误,给新人们提供参考。 1 有些关键字 cpp 文件中多写了 对于 C++ 类,
    的头像 发表于 11-15 12:42 ?1090次阅读

    如何在文本字段中使用上标、下标及变量

    KiCad的任何文本字段中,都可以通过以下的方式实现上标、下标、上划线以及显示变量及字段值的描述: 文本变量“文本变量”可以 原理图设置
    的头像 发表于 11-12 12:23 ?737次阅读
    如何在文本字段中使用上标、下标及<b class='flag-5'>变量</b>

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

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