2017-08-21 6 views
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つすべてを使用して使用しています。

  1. カーネルモジュールにddコマンドを実行する権限があることを確認するにはどうすればよいですか?
  2. ddコマンドが完了するのを待つためにシャットダウンを延期するにはどうすればよいですか?

答えて

0

dd実行が完了する前にシステムシャットダウンをどのように完了したのか分かりません。呼び出し後にエラーチェックが0になるため、最初に何が起こったのかを知ることはできません。ストレージはとにかく廃棄する場合は

モジュール全体が

をかなり独特に見える、私はこのようにヘッダを廃棄する点をレンダリング(ワンタイムキーを作成し、メモリに格納するための良い方法があると疑われますムート)。

また、クレームにもかかわらず、モジュールはRAMをスクラップしません。

+0

私はシステムが 'dd'が完了する前か、' dd'が実行するための正しい権限を持っていないかのいずれかでシャットダウンすると言った。これは、システムが依然として起動可能であることから明らかです。シャットダウンする前にターミナルで同じコマンドを実行すると、システムが起動できなくなります。 [関連](https://stackoverflow.com/questions/40385836/why-does-call-usermodehelper-fail-most-of-the-times) –

+0

結果を返すようにコードを編集しました。 'dd'エラーコードは0です。まだコマンドラインで実行されているvsが別の結果を出す理由はまだわかりません。 –

+0

これはかなり奇妙になっています。私は問題を手にしているとは思わない。私の提案は、この "パニック"機能ですべてのコードを一時的に削除して、ddの呼び出しをそのまま残すことです。それが失敗すると、はるかに簡単な出発点になります。あなたはそれが何をしているのかを記録するスクリプトを実行することさえできます。 –

関連する問題