カーネル モジュールから、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 なしでこの操作を行う方法はありますか?