为什么call_usermodehelper在大多数情况下会失败?

Sub*_*n P 2 linux kernel-module linux-kernel user-mode-linux kernel-mode

从内核模块,我试图使用call_usermodehelper函数来执行可执行文件sha1,该文件将文件作为参数并将文件的SHA1哈希值写入另一个文件(命名为output)。可执行文件完美运行。

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);
Run Code Online (Sandbox Code Playgroud)

但是大多数情况下,call_usermodehelper返回-14并无法执行可执行文件。可能是什么原因?

有时它可以工作,但是随后创建的输出文件被锁定(与直接运行sha1时不同),我必须先运行chown才能正确使用它。如何预防?

无论如何,没有call_usermodehelper可以执行此操作吗?

Tsy*_*rev 5

最后一个参数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 */
Run Code Online (Sandbox Code Playgroud)

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

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