摘要:Linux內存非法訪問檢查工具上新了:KFence
Linux的4月份基本都是在Linux 5.12的開發版本中度過的。如果要說這個期間Linux有什么讓人印象深刻的特性或者功能,那KFence一定會有一席之地。
KFence,全稱Memory Safety Error Checking,之所以讓眾多神經麻木、形容枯槁的Linuxer為之虎軀一震,究其原因還是當前內核中的的內存檢查工具參差不齊導致----開銷不大的內存檢測模塊功能不夠強大;功能強大的呢開銷又很大,最典型的就是著名的KASAN,即Kernel Address Sanitizer。
KASAN是一款動態檢測user-after-free、out-of-bounds的內存檢查工具。自從Linux-3.19進入內核后迅速躥紅,上到五六十歲的mainter,下到一二十歲的學生娃娃,在遇到一些奇怪的內存問題時,打開KASAN功能,多數時候都能夠給你帶來意外的驚喜。遺憾的是,KASAN雖好卻不能托付終身,因為它的開銷太大(經典KASAN要消耗總內存1/8,而最新的基於tag的KASAN的開銷雖然有所減少但是仍然有1/16)。因而大部分情況下Linuxer與KASAN的緣分可以說是"將恐將懼,置予於懷。將安將樂,棄予如遺",即一般情況下在開發階段打開KASAN以便盡早在開發階段發現錯誤,待到項目開發完畢、測試充分后再關掉KASAN。
說了KASAN這么多,無非就是要承上啟下,千呼萬喚始出來咱們的KFence。KFence的自我介紹的開場白是"一款低開銷、基於采樣實現的內存檢測工具"。它不僅擁有KASAN的out-of-bounds, use-after-free, invalid-free非法內存訪問檢查功能,而且開銷更低、效率更高。開銷有多低呢?低到可以直擊部署到生產環境上,用KFence在Linux5.12的pull request的提交說明來講,這種開銷就幾乎是0"near zero performance overhead"。
雖然KFence還比較年輕(但是誰不喜歡年輕的呢?而且還優秀),其檢測精度也還有待提升,還但是對於那些希望能夠將內存非法訪問檢測工具常態化部署到生產環境的Linux開發/運維人員來說,無疑是一個振奮的消息。試一試吧,還等什么呢?