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

    文章

    615

    浏览量

    30135
  • LINUX内核
    +关注

    关注

    1

    文章

    321

    浏览量

    23295
  • Debian
    +关注

    关注

    0

    文章

    79

    浏览量

    2183

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    飞凌嵌入式ElfBoard-环境变量之获取环境变量

    shell命令行中可以通过多种方式查看环境变量;shell本身就是进程,子进程会继承父进程的环境变量副本,可以直接通过env命令查看当
    发表于 03-13 08:50

    分享周末手搓的高性能C++虚拟示波器上位机(附带抗压测试视频)

    ; int snapOff1 = nOff1; // 6. 异步分离线程 // 不能用按引用捕获 [&],否则旦离开外层 if 作用域,局部变量销毁,后台线程将引发野指针
    发表于 03-08 13:03

    函数指针介绍

    这种函数应该都很熟悉,其实就是函数,然后返回值是 int 类型,是
    发表于 01-21 08:11

    值传递、指针传递、引用传递介绍

    局部变量栈中开辟了内存空间,但在栈中放的是由主调函数放进来的实参变量的地址。被调函数对形参的任
    发表于 01-21 06:48

    请问如何从函数内部判断本函数是否是成员函数还是非成员函数

    如何从函数内部判断本函数是否是成员函数还是
    发表于 01-06 06:30

    C语言函数指针的六高级的应用场景

    函数指针是种非常强大的编程工具,它可以让我们以更加灵活的方式编写程序。本文中,我们将介绍 6 函数指针的高级应用场景,并贴出相应的代码
    发表于 01-04 12:25

    如何搞定嵌入式 C语言中的全局变量问题?

    时序,起承转合。但是尽量不要用来传递参数,这个很忌讳的。 2、尽量把变量的作用范围控制使用它的模块里面,如果其他模块要访问,就开个读或写函数接口出来,严格控制访问范围。这
    发表于 12-16 06:54

    如何用函数指针调用函数

    给大家举例子: int Func(int x);/*声明函数*/ int (*p) (int x);/*定义
    发表于 12-11 06:26

    第7章 变量进阶与点阵LED(7.1 7.2)

    知识——变量的作用域和存储类别。 7.1变量的作用域 所谓的作用域就是指变量起作用的范围,也是变量的有效范围。变量按他的作用域可以分为局部
    的头像 发表于 12-10 16:25 483次阅读

    rt thread 按照官方视频一个一个字敲都不行,连main函数都无法进入,为什么?

    教程,移植时修改gd官方启动文件将bl main 改为了 bl entry 目前都还好 直可以执行到这里,然后就不动了 idle.c 两函数(rt_thread_def
    发表于 09-28 07:43

    【原创】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 459次阅读
    解锁LuatOS新世界:二次开发必备的3<b class='flag-5'>个</b>核心常识

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

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

    Google推出全新Cloud WAN解决方案

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