OpenAI將崩潰調試視為流行病學研究,修復了存在18之久年的GNU libunwind漏洞

2026年7月22日 16:25
OpenAI將崩潰調試視為流行病學研究,修復了存在18之久年的GNU libunwind漏洞

重點摘要

OpenAI工程師將崩潰調試比作流行病學研究,透過自動分析過去一年所有核心轉儲來找出規律,而非逐一排查。他們發現Rockset中兩個互不相關的錯誤同時出現,最終修復了存在18年之久的GNU libunwind漏洞。

站內 AI 整理稿

OpenAI 的工程團隊近期在修復一個存在長達十八年的 GNU libunwind 漏洞時,採用了一種前所未見的除錯策略:將崩潰調試比擬為流行病學研究,透過大規模自動化分析生產環境中的歷史崩潰記錄,成功找出兩個看似相關卻彼此獨立的錯誤根源。這項發現不僅解決了困擾團隊數週的伺服器異常,也意外揭露了開源底層函式庫中一個潛伏多年的安全隱患。這場除錯行動的起點,來自 OpenAI 旗下資料基礎設施服務 Rockset 所發生的間歇性崩潰。Rockset 是一款以 C++ 撰寫的即時分析資料庫,負責為 ChatGPT 的搜尋功能與資料外掛提供底層支援。

工程師們在例行監控中發現,某些函數在執行過程中會回傳錯誤的記憶體位址,而棧指標(stack pointer)也經常在執行途中偏移了整整八個位元組。這種不一致的現象讓團隊百思不得其解,因為他們提出的每一種可能原因,都很快被後續的實驗證據推翻。起初,團隊傾向於將問題歸結為單一程式錯誤,但隨著調查深入,他們開始懷疑事情並不單純。每一個假設都像是陷入死胡同:修復了一個可疑的程式碼段落,崩潰依然發生;調整了編譯參數,錯誤模式卻沒有改變。團隊花了數週時間埋頭於單一事件的深度追蹤,卻始終無法找到一致的解釋。轉機出現在他們決定改變方法論的那一刻——從「偵探式」的個案分析,轉向「流行病學」的群體統計。

這項被團隊稱為「流行病學調試」(epidemiological debugging)的技術,核心概念是:不要把每一次崩潰當作孤立事件,而是像公共衛生專家研究疾病爆發一樣,收集大量樣本,尋找統計上的規律與異常。OpenAI 的工程師們首先利用 ChatGPT 自動生成了一個腳本,這個腳本會逐一掃描過去一年內 Rockset 在生產環境中產生的所有核心轉儲檔案,提取每個檔案的開頭部分與暫存器資料,並過濾掉已知的誤報。接著,腳本將每一次崩潰自動分類為「回傳空指標」、「棧對齊錯誤」或其他類型,並將整個分析流程平行化,一次處理數百甚至上千個核心檔案。當這套自動化管線運作完畢後,團隊終於看到了全貌。

他們發現,過去一年中 Rockset 的崩潰其實來自兩種截然不同的原因,只是它們在時間點上恰好重疊,導致工程師誤以為是同一組錯誤。第一個錯誤是 Rockset 本身程式碼中的一個邏輯缺陷,會在某些邊界條件下回傳不正確的記憶體位址;第二個錯誤則深埋在系統底層——GNU libunwind 函式庫中一個長達十八年未曾被發現的漏洞,這個漏洞會在某些特定的執行緒交錯情境下,導致棧指標偏移八個位元組。GNU libunwind 是一個廣泛用於 Linux 系統的程式庫,主要負責處理程式執行時的堆疊回溯(stack unwinding),對例外處理、除錯器與效能剖析工具至關重要。

這個漏洞最早可追溯至 2008 年左右的程式碼提交,卻因為觸發條件極為罕見,一直未被主流開發者注意。直到 OpenAI 團隊透過大規模崩潰統計,才將這個隱藏了十八年的異常模式從雜訊中分離出來。修復過程同樣充滿挑戰。團隊首先確認 Rockset 自身的程式碼錯誤,並迅速部署了修補程式。但對於 GNU libunwind 的漏洞,他們需要與開源社群合作,提交詳細的錯誤報告與重現步驟。由於該漏洞只會在特定硬體架構、編譯選項與執行緒調度組合下才會觸發,OpenAI 的工程師們特別設計了一套壓力測試腳本,能夠在測試環境中穩定重現棧指標偏移的現象,從而協助 libunwind 維護者定位並修正問題。

這項發現的意義不僅在於修復了一個陳年漏洞,更在於驗證了「流行病學調試」這種方法論的實用價值。傳統的除錯流程往往依賴於開發者對單一崩潰事件的直覺與經驗,但在大規模分散式系統中,錯誤訊號可能被多種因素疊加而變得難以辨識。透過自動化收集與統計分析,團隊能夠跳脫個案的迷宮,直接從整體模式中找出異常的集群,類似於傳染病學中追蹤病例群聚來發現感染源的做法。OpenAI 的工程團隊在內部技術分享中表示,這次經驗讓他們重新思考了如何設計除錯工具鏈。未來,他們計劃將這套崩潰分析管線常態化,並考慮開放部分分析腳本供社群使用。

同時,GNU libunwind 的修補程式已經被併入上游程式碼庫,所有使用該函式庫的 Linux 發行版都應盡快更新,以消除這個潛在的穩定性與安全風險。值得注意的是,這個漏洞雖然在技術上屬於罕見的邊界條件,但由於 libunwind 被廣泛整合在資料庫、編譯器、容器執行環境等關鍵元件中,其影響範圍可能超出預期。OpenAI 的工程師們提醒,任何長期運行的 C++ 服務如果出現難以解釋的棧指標異常,都應該考慮檢查 libunwind 的版本是否受影響。

從一個看似無解的崩潰問題,到最終發現兩個隱藏錯誤,OpenAI 的這趟除錯旅程不僅展現了大型語言模型輔助程式開發的潛力,也為業界提供了一種全新的除錯思路。當傳統的「逐行追蹤」碰到瓶頸時,或許換個角度,用「流行病學」的眼光看待系統中的每一次異常,反而能看見更清晰的真相。

Related

相關文章

秋招信息戰打不動?我們測了千問的新功能,讓Agent全程陪跑

阿里巴巴旗下大模型「千問」近日推出全新功能,針對秋季招聘季中求職者面臨的海量資訊與繁複流程,打造「Agent 全程陪跑」服務。根據官方測試,這項功能能協助使用者自動篩選職缺、整理企業資訊,甚至模擬面試問答,大幅減輕求職者自行蒐集與比對資訊的負擔。 在實際體驗中,用戶只需輸入自身學經歷與目標產業,Agent 便會自動爬取最新的秋招公告,並按職位匹配度、截止日期等條件排序,同時附上企業背景與筆面試經驗摘要。

剛剛

AI寫的PR堆成山,Rust已忍無可忍

Rust 語言社群近期強烈反彈大量由 AI 生成的公關稿與行銷文淹沒官方討論區,這些內容缺乏深度且帶有商業目的,讓資深貢獻者不堪其擾。社群管理團隊正研擬加強審查機制與提高發文門檻,但同時也擔心誤傷真正的新手使用者。這場爭議凸顯開源專案在 AI 時代面臨資訊過濾成本攀升的困境。

1 小時前