1

커널 모듈에서 call_usermodehelper 함수를 사용하여 파일을 인수로 취하여 SHA1 해시 합계를 다른 파일 (출력이라는 이름)에 쓰는 실행 파일 sha1을 실행하려고합니다. 실행 파일은 완벽하게 작동합니다.call_usermodehelper가 대부분의 경우 실패하는 이유는 무엇입니까?

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없이이 작업을 수행 할 수 있습니까?

답변

2

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 */ 

당신이 볼 수 있듯이, 대기 = 1 간부가 수행되는 동안 함수가 대기하지만 프로세스를 기다리지 않습니다.

다른 제약 조건이없는 경우 값 UMH_WAIT_PROC이 더 안정적인 결과를 제공합니다.

+0

2로 변경 한 후 작동하는 것으로 보입니다. 감사합니다. –