使用 Linux Kernel Dump Test Module (LKDTM) 觸發崩潰¶
lkdtm 模組提供了一個介面,用於在預定義的程式碼位置中斷(通常是崩潰)核心,以評估核心異常處理的可靠性,並測試使用不同轉儲解決方案獲得的崩潰轉儲。 該模組使用 KPROBEs 來檢測觸發位置,但也可以透過 debugfs 直接觸發核心,而無需 KPROBE 支援。
您可以透過在插入模組時使用模組引數,或者透過 debugfs 介面,選擇觸發器的位置(“崩潰點名稱”)和操作型別(“崩潰點型別”)。
用法
insmod lkdtm.ko [recur_count={>0}] cpoint_name=<> cpoint_type=<>
[cpoint_count={>0}]
- recur_count
堆疊溢位測試的遞迴級別。 預設情況下,這是基於核心配置動態計算的,目的是剛好足夠大以耗盡核心堆疊。 該值可以在 /sys/module/lkdtm/parameters/recur_count 中看到。
- cpoint_name
在核心中的何處觸發該操作。 它可以是 INT_HARDWARE_ENTRY、INT_HW_IRQ_EN、INT_TASKLET_ENTRY、FS_SUBMIT_BH、MEM_SWAPOUT、TIMERADD、SCSI_QUEUE_RQ 或 DIRECT 之一。
- cpoint_type
指示在命中崩潰點時要採取的操作。 這些很多,最好直接從 debugfs 查詢。 一些常見的有 PANIC、BUG、EXCEPTION、LOOP 和 OVERFLOW。 有關完整列表,請參見 /sys/kernel/debug/provoke-crash/DIRECT 的內容。
- cpoint_count
指示在觸發操作之前要命中的崩潰點次數。 預設值為 10(DIRECT 除外,它始終立即觸發)。
您還可以透過掛載 debugfs 並將型別寫入 <debugfs>/provoke-crash/<crashpoint> 來引發故障。 例如:
mount -t debugfs debugfs /sys/kernel/debug
echo EXCEPTION > /sys/kernel/debug/provoke-crash/INT_HARDWARE_ENTRY
特殊檔案 DIRECT 將直接誘發該操作,而無需 KPROBE 工具。 當模組構建用於不支援 KPROBE 的核心時,此模式是唯一可用的模式
# Instead of having a BUG kill your shell, have it kill "cat":
cat <(echo WRITE_RO) >/sys/kernel/debug/provoke-crash/DIRECT