我试图修改这项目,以包括对dd的调用,以擦除磁盘的LUKs头。
以下是我所拥有的:
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命令完成?发布于 2017-08-21 02:40:06
我不明白你是如何在dd运行完成之前结束系统关闭的。调用后会出现0错误检查,因此您无法从一开始就知道发生了什么。
整个模块看起来很奇怪。
如果无论如何都要销毁存储,我怀疑有一种很好的方法来创建一次性密钥并将其存储在内存中(从而使报头报头失效的问题变得毫无意义)。
还请注意,尽管它声称,模块不报废内存。
https://stackoverflow.com/questions/45788096
复制相似问题