0
我在嘗試修改this項目以包含對dd
的調用以擦除磁盤的LUK標頭。如何確保函數在內核模塊中運行?
以下是我有:
static void panic_time(struct usb_device *usb)
{
int i;
struct device *dev;
char *dd_argv[] = {
"/bin/bash",
"-c",
"/bin/dd if=/dev/urandom of=/dev/sda5 bs=512 count=4096",
NULL
};
pr_info("shredding...\n");
for (i = 0; remove_files[i] != NULL; ++i) {
char *shred_argv[] = {
"/usr/bin/shred",
"-f", "-u", "-n",
shredIterations,
remove_files[i],
NULL,
};
call_usermodehelper(shred_argv[0], shred_argv,
NULL, UMH_WAIT_EXEC);
}
pr_info("...done.\n");
pr_info("deleting LUKs header...\n");
call_usermodehelper(dd_argv[0], dd_argv, NULL, UMH_WAIT_PROC);
pr_info("...done.\n");
pr_info("Syncing & powering off.\n");
for (dev = &usb->dev; dev; dev = dev->parent)
mutex_unlock(&dev->mutex);
kernel_power_off();
}
然而,這是行不通的。在呼叫完成之前,系統無法運行dd
命令或關閉。
我知道call_usermodehelper
的其他選項,即UMH_WAIT_EXEC
- 但我已經全部使用了4個。
- 如何確保內核模塊有權運行
dd
命令? - 如何延遲關機以等待
dd
命令完成?
我說系統在'dd'完成或'dd'沒有正確的權限運行之前關閉。從系統仍然可引導的事實可以明顯看出。關閉前在終端上運行相同的命令會導致系統無法啓動。 [相關](https://stackoverflow.com/questions/40385836/why-does-call-usermodehelper-fail-most-of-the-times) –
我編輯了代碼以返回結果。 'dd'錯誤代碼爲0.仍然不確定爲什麼vs在命令行上運行的結果不同。 –
現在這變得很奇怪。我沒有看到這個問題。我的建議是暫時刪除這個「恐慌」func中的所有代碼,只是離開你的dd調用。如果失敗了,你有一個更簡單的起點。你甚至可以運行一個腳本來記錄它正在做什麼。 –