krenel 模块 call_usermodehelper 问题

问题描述 投票:0回答:1

我想在我的内核驱动程序中调用 mknod。但从来不工作。 我测试了一些简单的命令,但都失败了。 我的系统是fedora 40,内核6.9.7。 这是我的测试代码:

static int __init call_usermodehelper_init(void)
{
    int ret = -1;   
    char path[] = "/bin/mkdir";
    char *argv[] = {path, "-p", "/tmp/new_dir", NULL};

    char *envp[] = {"HOME=/", 
                "SHELL=/bin/bash",
                "TERM=linux", 
                "PATH=/sbin:/bin:/usr/bin", 
                NULL};
    printk("call_usermodehelper module is starting..!\n");
    ret = call_usermodehelper(path, argv, envp, UMH_WAIT_PROC);
    printk("ret=%d\n", ret);
    return 0;
}
module_init(call_usermodehelper_init);

并且代码永远不会成功。 我加载ko后,没有找到/tmp/touchX.txt。 这些天我改了很多次argv,都没有成功,func返回-2/-13/256..

但是当我在其他linux、Ubuntu/rhel上编译并运行ko时,call_usermodehelper可以正常运行。 谁能告诉我为什么 call_usermodehelper 在 fedora 上总是失败?

我已经在其他系统上测试过了,效果很好。 我想知道为什么它在 Fedora 系统上不起作用

linux kernel fedora
1个回答
0
投票

问题已经解决了。原因是selinux。我将selinux设置为disabled,函数call_usermodehelper可以成功执行。

© www.soinside.com 2019 - 2024. All rights reserved.