硬汉嵌入式论坛

 找回密码
 立即注册
查看: 169|回复: 2
收起左侧

[Linux] 请教关于call_usermodehelper调用问题

[复制链接]

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2024-4-30 13:42:52 | 显示全部楼层 |阅读模式
本帖最后由 ew1874 于 2024-4-30 13:45 编辑



请教大家一个问题。
linux版本是3.10想在ko模块中使用call_usermodehelper调用系统命令,
问题:使用call_usermodehelper函数时返回值是13,未能成功调用命令。
代码如下:
int call_usermodehelper_test(void)
{
        int ret = 0;
          char *envp[] = {NULL};
        char *argv[] = {"/sbin/ifconfig",NULL};

        ret = call_usermodehelper(argv[0],  argv,  envp,  UMH_WAIT_PROC);
        rt_printf("call_usermodehelper ret = %d\n",ret);

        return ret;
}
但是调用"/sbin/reboot"时却能返回0并且执行重启命令。
int call_usermodehelper_test(void)
{
        int ret = 0;
          char *envp[] = {NULL};
        char *argv[] = {"/sbin/reboot",NULL};

        ret = call_usermodehelper(argv[0],  argv,  envp,  UMH_WAIT_PROC);
        rt_printf("call_usermodehelper ret = %d\n",ret);

        return ret;
}

网上查了一下还是没找到原因,在这里请教一下大家。

代码

代码

结果

结果

PATH

PATH
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2024-4-30 14:38:13 | 显示全部楼层
copilot回复

您好!在Linux内核中使用call_usermodehelper函数时,返回值为13通常表示有一个权限问题。在这种情况下,可能是因为/sbin/ifconfig命令需要特定的权限才能执行,而当前的环境可能没有提供这些权限。

一般来说,call_usermodehelper的返回值是由被调用的命令的退出状态决定的。如果返回值是一个正数,它通常是一个错误码,这些错误码定义在<asm-generic/errno-base.h>和<asm-generic/errno.h>中。例如,错误码13对应于EACCES,意味着权限被拒绝。

为了解决这个问题,您可以尝试以下几个步骤:

确保/sbin/ifconfig命令对于调用它的用户是可执行的。
检查/sbin/ifconfig是否存在,并且有正确的执行权限。
如果您的模块以root权限运行,确保安全模块(如SELinux或AppArmor)没有阻止执行。
您可以尝试在envp中设置正确的环境变量,例如PATH,以确保命令可以在环境中找到并执行。
此外,ifconfig已经在许多现代Linux发行版中被ip命令所取代,因此您也可以考虑使用ip命令来代替ifconfig。
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2024-4-30 14:51:37 | 显示全部楼层
eric2013 发表于 2024-4-30 14:38
copilot回复

您好!在Linux内核中使用call_usermodehelper函数时,返回值为13通常表示有一个权限问题。 ...

好的,感谢eric!我再试试。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-18 03:58 , Processed in 0.229301 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表