Google使用KCSAN在Linux內核中發現了數百種競爭條件

Linux內核

谷歌工程師 有助於Linux內核 宣布已經使用KCSAN在內核中發現了數百個“競賽條件”。 該公司一直致力於AddressSanitizer來查找與內存損壞有關的錯誤,或者為代碼中未定義的行為查找UndefinedBehaviorSanitizer。

這次, Google為Linux內核提供了一個新的“競賽條件”檢測器,稱為KCSAN (內核並發清理程序)。 這些關鍵漏洞並不新鮮。 實際上 當同一進程中的兩個或多個線程同時訪問同一內存位置時,就會發生爭用條件,其中至少有一個訪問權限是寫操作,以及線程不使用任何排他鎖來控制對其對此內存的訪問。

當滿足這些條件時,訪問順序是不確定的,並且根據此順序,一次運行到另一次運行可能會得出不同的結果。

競爭條件越來越多地被視為並發訪問錯誤,並且難以復制 並在並行程序中進行診斷。 Linux內核是一個大型軟件系統,其中線程密集型並行性和非確定性線程交織更容易受到競爭條件的影響。

某些競爭情況可能是良性的,但到目前為止,許多競爭情況都被認為是錯誤。

Linux內核提供了多種機制來避免和管理這些類型的情況 由於存在諸如線程分析器或KTSAN(內核線程清理工具)之類的工具,可以檢測Linux內核中的關鍵執行錯誤。

但是,也為Linux內核做出貢獻的Google最近提出了KCSAN,一種新的內核競賽條件檢測器,類似於KTSAN。

根據Google的說法,KCSAN致力於發現內核代碼中的競爭情況。 該動態嚴重命中檢測器是內核線程消毒器(KTSAN)的替代產品。

根據Google的解釋, 與KTSAN檢測器不同,KCSAN基於採樣監視點, 這是事件發生之前的關鍵行程檢測器。 KCSAN設計中的關鍵優先事項是缺乏誤報,可伸縮性和簡單性。

KCSAN使用編譯工具訪問內存。 KCSAN與GCC和Clang編譯器兼容。 對於GCC,它需要版本7.3.0或更高版本;對於Clang,它需要版本7.0.0或更高版本。

在項目的GitHub頁面上Google的Marco Elver寫道,上個月在測試中使用KCSAN,他們在短短兩天內發現了300多個獨特的核心競爭情況。 KCSAN提供了幾種配置選項以自定義其行為。

“我們已經通過Syzkaller使用KCSAN了幾週了,我們發現了很多錯誤。 他寫道,最初在2019年300月,我們在短短兩天內就發現了XNUMX多種獨特的比賽情況。

Google表示,整體方法基於DataCollider, 內核模塊中競爭情況的另一種動態檢測器。 但是與DataCollider不同,KCSAN不使用硬件監視點,而是依靠編譯工具。

監視點是使用有效的編碼實現的,該編碼將類型,大小和訪問地址存儲在一個長文件中。 使用靈活的監視點的好處是可移植性和在限制監視點可以激活的訪問權限方面的更大靈活性。

以下是KCSAN為Google提出的一些關鍵點:

  • 高性能: KCSAN運行時最少,並且不需要每次訪問都具有共享狀態鎖定。 結果是比KTSAN更好的性能。
  • 沒有額外的內存: 根據Google的說法,不需要緩存。 當前的實現使用少量長度來編碼監視點信息,這可以忽略不計
  • 內存命令: KCSAN不知道Linux內核內存模型(LKMM)控制規則。 與賽前競賽檢測器(如KTSAN)相比,這可能會導致關鍵競賽丟失(假陰性)
  • 精度: 根據Google的說法,KCSAN是不精確的,因為它使用了抽樣策略。
  • 需要註釋: 在KCSAN運行時之外需要最少的註釋。 對於前置事件偵聽器,任何遺漏都會導致誤報,這在包含自定義計時機制的內核上下文中尤其重要。
  • 檢測來自設備的動態寫入: 通過在觀察點設置期間檢查數據值,還可以檢測到來自設備的動態寫入。

發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責資料:AB Internet Networks 2008 SL
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。