0
dd
への呼び出しを含めるように、thisプロジェクトを変更して、ディスクのLUKヘッダーを消去しようとしています。ここでカーネルモジュールでどのように機能が実行されているか確認するには?
は私が持っているものです。
static void panic_time(struct usb_device *usb)
{
int i;
struct device *dev;
char *dd_argv[] = {
"/bin/bash",
"-c",
"/bin/dd if=/dev/urandom of=/dev/sda5 bs=512 count=4096",
NULL
};
pr_info("shredding...\n");
for (i = 0; remove_files[i] != NULL; ++i) {
char *shred_argv[] = {
"/usr/bin/shred",
"-f", "-u", "-n",
shredIterations,
remove_files[i],
NULL,
};
call_usermodehelper(shred_argv[0], shred_argv,
NULL, UMH_WAIT_EXEC);
}
pr_info("...done.\n");
pr_info("deleting LUKs header...\n");
call_usermodehelper(dd_argv[0], dd_argv, NULL, UMH_WAIT_PROC);
pr_info("...done.\n");
pr_info("Syncing & powering off.\n");
for (dev = &usb->dev; dev; dev = dev->parent)
mutex_unlock(&dev->mutex);
kernel_power_off();
}
しかし、これは動作しません。システムは、dd
コマンドの実行に失敗するか、コールが完了する前にシャットダウンします。
call_usermodehelper
に与えられた他のオプションは、UMH_WAIT_EXEC
と認識されていますが、私は4つすべてを使用して使用しています。
- カーネルモジュールに
dd
コマンドを実行する権限があることを確認するにはどうすればよいですか? dd
コマンドが完了するのを待つためにシャットダウンを延期するにはどうすればよいですか?
私はシステムが 'dd'が完了する前か、' dd'が実行するための正しい権限を持っていないかのいずれかでシャットダウンすると言った。これは、システムが依然として起動可能であることから明らかです。シャットダウンする前にターミナルで同じコマンドを実行すると、システムが起動できなくなります。 [関連](https://stackoverflow.com/questions/40385836/why-does-call-usermodehelper-fail-most-of-the-times) –
結果を返すようにコードを編集しました。 'dd'エラーコードは0です。まだコマンドラインで実行されているvsが別の結果を出す理由はまだわかりません。 –
これはかなり奇妙になっています。私は問題を手にしているとは思わない。私の提案は、この "パニック"機能ですべてのコードを一時的に削除して、ddの呼び出しをそのまま残すことです。それが失敗すると、はるかに簡単な出発点になります。あなたはそれが何をしているのかを記録するスクリプトを実行することさえできます。 –