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