核心熱補丁原理介紹、製作、使用、驗證方法
此文已由作者楊延亮授權網易雲社群釋出。
歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。
簡介
核心熱補丁是一種無需重啟作業系統,動態為核心打補丁的技術。系統管理員基於該技術,可以在不重啟系統的情況下,修復核心BUG或安全漏洞,可以在最大程度上減少系統宕機時間,增加系統的可用性。
使用場景
1、修復核心或模組的缺陷函式
核心熱補丁能夠動態的修復核心和模組的缺陷函式。在開發人員發現問題,或者作業系統發現安全漏洞需要修復時,可以通過將缺陷函式或者安全補丁製作成核心熱補丁打入系統中的方法,在不需要重啟系統或者插拔模組、不中斷業務的前提下修復缺陷。
2、開發過程中增加除錯或測試手段
核心熱補丁也適用於在開發過程中進行除錯和測試。比如在模組或者核心的開發過程中,如果需要通過在某一個函式中新增列印資訊,或者為函式中某一個變數賦予特定的值,可以通過核心熱補丁的形式實現,而不需要重新編譯核心、安裝、重啟的操作。
原理分析
Kpatch基於ftrace實現核心函式的替換,類似於ftrace的動態探測點。利用mcount機制,在核心編譯時在每個函式入口保留數個位元組,然後在打補丁時將“被替換函式”入口保留的位元組替換為跳轉指令,跳轉到Kpatch的相關流程中,最終進入“新函式”的執行流程,實現函式級別的執行流程線上替換。具體而言如下圖:
舉例說明
1、以如下patch為例:
2、將步驟1中的patch製作為對應ko檔案,執行命令及結果顯示如下:
說明:關於make-kpatch命令的執行引數說明可執行"make-kpatch --help"命令來檢視
3、執行如下命令,打入核心熱補丁:
4、檢視對應dmesg資訊如下:
5、執行檢視記憶體資訊命令,檢視到結果以及dmesg資訊如下所示:
結合步驟1中的程式碼對比發現,在/proc/meminfo所看到的內容中,多了LivePatchtest項,並且在執行"cat /proc/meminfo"命令時,dmesg資訊中也列印了步驟1中patch程式碼列印片段。這就證明了我們製作的熱補丁是有效的,成功打入了當前執行的核心中。
以上即為熱補丁原理、製作、打入熱補丁、驗證熱補丁是否生效的基本方法,有興趣的同學可以在開發環境上嘗試一下。
更多網易技術、產品、運營經驗分享請點選。
相關文章:
【推薦】 從加班論客戶端開發中的建模
【推薦】 關於網易雲驗證碼V1.0版本的服務介紹
【推薦】 網易猛獁:資料質量漫談