系统相关
首页 > 系统相关> > linux – 为什么call_usermodehelper大多数时候都会失败?

linux – 为什么call_usermodehelper大多数时候都会失败?

作者:互联网

从内核模块,我试图使用call_usermodehelper函数来执行一个可执行文件sha1,它接受一个文件作为参数,并将文件的SHA1哈希值写入另一个文件(命名输出).可执行文件完美无缺.

int result=-1;
name = "/home/file"
char *hargv[] = {"/home/sha1", name,NULL };
char *henvp[] = {"HOME=/", "PATH=/sbin:/usr/sbin:/bin:/usr/bin", NULL };
result = call_usermodehelper("/home/sha1", hargv, henvp, 1);

但是大多数时候call_usermodehelper返回-14并且无法执行可执行文件.可能是什么原因?

有时它可以工作,但是然后创建的输出文件被锁定(与sha1直接运行时发生的情况不同)并且我必须运行chown才能正确使用它.如何防止这种情况?

无论如何在没有call_usermodehelper的情况下执行此操作?

解决方法:

call_usermodehelper的最后一个参数实际上是某种枚举:

#define UMH_NO_WAIT     0       /* don't wait at all */
#define UMH_WAIT_EXEC   1       /* wait for the exec, but not the process */
#define UMH_WAIT_PROC   2       /* wait for the process to complete */
#define UMH_KILLABLE    4       /* wait for EXEC/PROC killable */

如您所见,在wait = 1时,函数在执行exec时等待,但不等待进程.

如果没有其他约束,则值UMH_WAIT_PROC会给出更稳定的结果.

标签:linux,linux-kernel,kernel-module,user-mode-linux,kernel-mode
来源: https://codeday.me/bug/20191003/1848466.html