文章正文

法证先锋2

OpenAI 将崩溃调试视为流行病学研究,修复了存在 18 年之久的 GNU libunwind 漏洞_我的网站

淘宝

一 |     本报记者 宋雨航            近年来,随着社会的快速发展和公民法律意识的提高,各类诉讼案件呈现不断增长的趋势。为了有效应对这一挑战,建昌县法院积极开展诉源治理工作,扎实推进工作机制和模式创新,探索诉源治理新路径。    作者 | Steef-Jan Wiggers     译者 | 平川          OpenAI 的工程师们花了数周时间,试图解释 Rockset 中那些神秘的崩溃问题。

二 | 通过源头预防、多元化解等方式,抓前端、治末病、解纷争,减少诉讼案件数量,提高司法效率,促进社会和谐。           多元解纷成合力            该法院积极推动多元化纠纷解决机制建设,通过建立诉调对接中心引入社会力量、开展线上调解等方式,为当事人提供便捷、高效的纠纷解决途径。Rockset 是一款 C++ 数据基础设施服务,为 ChatGPT 的搜索和数据插件提供支持。

三 | 去年,诉前调解案件2144件,调解成功1165件,调解成功率为54.34%。

四 |            在一起离婚纠纷案件中,考虑到双方从事市场经营工作,平日非常忙碌,没有时间到法院进行调解,调解员将调解室搬进市场,上门进行调解。调解员凭借多年的调解经验,分别安抚双方情绪,从婚姻家庭、夫妻关系等方面耐心为当事人做劝导,进行背对背调解。调解员从情与理的角度切入,积极向其释明《民法典》相关法律法规,为其提供专业指导。函数似乎会返回错误的内存地址,栈指针在执行过程中似乎会偏移 8 个字节。在调解员的努力下,双方认识到对家庭的责任感不够,表示以后会互相关心对方,主动分担家务,经营好自己的小家。至此,这起离婚纠纷案件得以在诉前成功解决。团队提出的每一种假设都面临着有力的反证。           为充分发挥行业调解优势,强化人民法庭与司法所、人民调解委员会的协调配合,形成多元解纷合力,该法院与建昌县司法局联合下发文件,建立健全先行调解、委托调解、司法确认、诉调对接等机制。这个 Bug 似乎根本不可能存在。

五 |          他们原本以为是一个 Bug ,结果却发现是两个互不相关的 Bug ,它们只是很巧合地在同一时间被发现了。这一突破性发现并非来自对单个崩溃事件的深入排查,而是源于转向了他们所说的“流行病学调试”:构建一条管道,自动分析过去一年中生产环境的每一个核心转储文件,然后寻找整体规律,而不是对单个案例进行推断。该法院建立的调解制度,明确了调解程序、调解期限和调解结果确认等事项。         该团队让 ChatGPT 编写了一个脚本,用于下载每个核心文件的开头部分,提取寄存器数据,过滤已知的误报,并将每次崩溃标记为“返回空指针”、“栈对齐错误”或其他类型。在立案阶段,加强对案件的评估与分流工作,扎实有效推进民间纠纷调解。

六 | 他们将该脚本并行应用于过去一年中的所有 Rockset 核心转储文件。他们很快就发现了相关性。原本从症状上看属于同类的问题,实际上对应两组特征完全不同的崩溃事件。同时,加强调解团队建设,选拨了一批经验丰富、业务精湛的调解员,按情理法相融原则,有效开展调解工作。

七 | 现该法院特邀调解员为18人,按4个派出法庭辖区辖驻庭调解案件,建立调解室20间。         这些因栈对齐错误导致的崩溃均源自同一个 Azure 区域,有明确的起始日期,而且从未出现在长期运行的节点上。团队追踪发现,这些崩溃源自一台物理主机,其 CPU 正在悄无声息地产生错误的结果。           创新发展增动力            该法院的“诉前委托鉴定工作机制”成功入选全省法院2023年度“评推树”活动“创新成果”。

八 | 它既没有过热,也没有抛出机器检查异常,而只是数学运算默默出了错。在诉前调解阶段构建诉前委托鉴定制度,将分调裁审与诉前鉴定有序衔接,有效化解纠纷,避免程序空转。

九 | 将该主机从服务中移除后,因栈对齐错误导致的崩溃便完全消失了。通过诉前鉴定与诉前调解、诉中调解工作的衔接,有效地提升了各个环节的工作质效,实现高质量、高效率的定纷止争。

十 |          在剔除硬件崩溃问题后,剩余的由“返回空指针”导致的崩溃问题便变得可控了。此前,团队曾排除了 C++ 异常展开的原因,因为他们认为自己找到了反例:在未使用异常的代码路径中发生了崩溃。

十一 | 但这些反例全都来自有硬件损坏的故障集群。

十二 | 一旦剔除了这些干扰因素,剩余的所有崩溃便都是发生在异常展开过程中了。

十三 | 同时,通过诉前鉴定,对于诉前调解不成转入诉讼的案件,可确定无争议的事实,固定争议焦点,为后续诉讼案件以繁简识别提供证据,为案件审理打下基础。           该法院充分利用现代信息技术手段提升溯源治理水平。         问题发生的根本原因是 GNU libunwind 的 _Ux86_64_setcontext 函数中有一个已经存在 18 年的竞争条件。线上平台有效地解决了当事人因工作、路程原因不积极进行诉讼的问题,实现了诉讼服务的便捷化和高效化。

十四 | 2023年,该法院全面优化诉服中心服务功能,调解成功案件1023件,2024年1月至4月调解成功案件366件。在 C++ 异常展开过程中,libunwind 会在栈上合成一个 ucontext_t 结构体,填充所需的寄存器状态,然后调用 _Ux86_64_setcontext 将控制权转移给清理处理程序。

十五 | 诉前调解的线上调解成功案件约占全部诉前调解案件的30%。

十六 |            为了激发调解员参与诉源治理的积极性,该法院建立了考核和激励机制。立案庭对调解员进行定期培训,每月进行总结,对调解过程中出现的问题进行剖析和解答,不断促进提升他们的调解能力和水平。问题在于:_Ux86_64_setcontext 在从旧结构体中读取指令指针的操作尚未完成之前,就将栈指针(%rsp)更新为指向新的栈帧。一旦 %rsp 发生变化,该结构体便不再属于活动栈的一部分,也不再受内核红区的保护。同时也对表现突出的个人和庭室给予表扬。诉前调解得到了当地党委和政府的大力支持,陆续拨付补助款30万元。如果信号恰好在 %rsp 更新与 %rip 读取之间的这一时间窗口内到达,内核就会在该结构体之上构建其信号帧,指令指针遭到破坏,函数便会跳转到 NULL 或垃圾地址。           宣传教育齐发力            诉源治理的根基在群众,只有将法治信仰内化于心、外化于行,才能真正实现止纠纷于前端、化矛盾于微澜。

十七 | 为此,该法院注重加强法治宣传和教育工作,通过开展法治讲座、法院开放日等活动,普及法律知识,提高群众的法律意识和法律素养。4月16日,该法院开展“保护妇女儿童权益”专题开放日活动,新区小学师生通过参观和模拟法庭,“零距离”了解法院工作,“沉浸式”感受司法氛围;5月23日,该法院政治部干警到某中学开展“典亮青春 护航成长”民法典进校园主题宣讲活动;6月6日,该法院立案庭全体工作人员到街边路口宣传民法典。           该法院利用微信公众号,每天更新一期普法类动漫,自5月8日开栏以来,《诉讼指南》专栏民事诉讼篇已更新20集,社会反馈良好,有效扩大了法治宣传覆盖面和影响力,为诉源治理工作营造了良好的社会氛围。         竞争窗口的宽度正好为一条指令。以现代处理器的时钟频率计算,这大约相当于 100 皮秒。           通过多样化的实施溯源治理措施,该法院成功地将大量矛盾纠纷化解在诉前调解阶段,有效减轻了诉讼压力,提高了司法效率。该法院将继续深化诉源治理工作,不断探索创新举措,努力构建更加完善、更加高效的矛盾纠纷解决机制,提升诉源治理工作的质量和水平,为人民群众提高更加优质、高效的司法服务。在大多数程序中,这种情况根本不会被触发。OpenAI 的 Rockset 使用了 timer_create 函数,每隔几毫秒的 CPU 时间就发送一次 SIGUSR2 信号,为的是实现轻量级的按查询记账,这样产生的信号发送事件远多于传统的应用程序。正是这种高频的信号发送,将只在理论上可能发生的竞争状况转化成了实际生产环境中的崩溃。

十八 |          该团队将一个修复方案和一个自包含的重现示例提交到了 GNU libunwind,并通过验证证实,其他展开器(如 libgcc)不存在这个问题。该修复方案通过重新排序指令,确保在更新 %rsp 之前先读取 %rip,从而彻底消除了这个时间窗口。         该团队对这一教训的总结值得全文引用:          最重要的步骤并非巧妙地解读汇编代码,也不是对细节的深入了解,而是构建一个高质量的数据集。如果没有这个数据集,我们就会把两种截然不同的现象混为一谈,并试图通过推理来理清这种混乱。

十九 | 一旦获得了准确且完整的全量数据,问题的结构便显而易见了。

|          如果你的团队正在排查难以解释的生产环境崩溃问题,请检查你们是否将多个 Bug 混为一谈。那些看似与所有假设都不相符的症状,实际上可能并不矛盾;它们可能与两个不同的假设相符,而你却无意中将它们混淆了。洞察问题结构的最快途径,并非对单个案例进行更深入的分析,而是获取涵盖所有故障案例的完整、带标签的数据。         这篇完整的工程技术博文包含了详细的栈内存示意图、存在漏洞的汇编指令,以及揭示出两种不同类型故障的崩溃率可视化图表。         https://www.infoq.com/news/2026/07/openai-libunwind-core-dumps/          声明:本文由 InfoQ 翻译,未经许可禁止转载。

Current article:http://j20.feishuozhuangkeqi.cyou/news/20260826_939411.html

Published on:20:19:27


|