2

从一个内核模块,我试图使用 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 有没有办法做这个操作?

4

1 回答 1

5

for 最后一个参数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会给出更稳定的结果。

于 2016-11-02T18:13:49.423 回答