首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确保函数在内核模块中运行?

如何确保函数在内核模块中运行?
EN

Stack Overflow用户
提问于 2017-08-21 00:48:48
回答 1查看 183关注 0票数 0

我试图修改项目,以包括对dd的调用,以擦除磁盘的LUKs头。

以下是我所拥有的:

代码语言:javascript
复制
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种方法。

  1. 如何确保内核模块具有运行dd命令的权限?
  2. 如何延迟关机以等待dd命令完成?
EN

回答 1

Stack Overflow用户

发布于 2017-08-21 02:40:06

我不明白你是如何在dd运行完成之前结束系统关闭的。调用后会出现0错误检查,因此您无法从一开始就知道发生了什么。

整个模块看起来很奇怪。

如果无论如何都要销毁存储,我怀疑有一种很好的方法来创建一次性密钥并将其存储在内存中(从而使报头报头失效的问题变得毫无意义)。

还请注意,尽管它声称,模块不报废内存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45788096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档