首页 资讯 国内 聚焦 教育 关注 热点 要闻 民生1+1 国内

您的位置:首页>热点 >

Google 有一个函数,20000 个变量……

来源:互联网    发布时间:2023-06-26 14:04:41

↓推荐关注↓

转自:OSC开源社区(ID:oschina2013)


(资料图片仅供参考)

近日,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 那边,并开始分析这个问题发生的原因。

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 仍然在着手研究解决方案,看看是否能为还在使用老系统的用户一劳永逸解决这个问题,以免未来发生同样的情况。

相关链接:https://hg.mozilla.org/mozilla-central/rev/304d01f5488b

- EOF -

推荐阅读点击标题可跳转

0、极客专属:几十款程序员秒懂的T恤/卫衣

1、一个国外小老头,用被淘汰的编程工具,开发了一个了不起的软件

2、字节一年,人间三年!!

3、47 岁技术传奇陈皓(左耳朵耗子)去世,叛逆人生不断创业,网友纷纷悼念

关注「程序员的那些事」加星标,不错过圈内事

点赞和在看就是最大的支持

关键词:

频道精选

首页 | 城市快报 | 国内资讯 | 教育播报 | 在线访谈 | 本网原创 | 娱乐看点

Copyright @2008-2018 经贸网 版权所有 皖ICP备2022009963号-11
本站点信息未经允许不得复制或镜像 联系邮箱:39 60 29 14 2 @qq.com