web-dev-qa-db-ja.com

単一のコマンドでカーネルパニックを引き起こす方法は?

単一のコマンドラインでカーネルパニックを引き起こすことは可能ですか?

Sudoingユーザーにとって最もわかりやすいそのようなコマンドは何ですか?また、もしあれば、通常のユーザーにとっては何でしょうか?

コマンドの一部として何かをダウンロードすることを提案するシナリオはカウントされません。

66
Desmond Hume

FreeBSD:

sysctl debug.kdb.panic=1

Linux(詳細情報 カーネルのドキュメント ):

echo c > /proc/sysrq-trigger
83
artyom
mkdir /tmp/kpanic && cd /tmp/kpanic && printf '#include <linux/kernel.h>\n#include <linux/module.h>\nMODULE_LICENSE("GPL");static int8_t* message = "buffer overrun at 0x4ba4c73e73acce54";int init_module(void){panic(message);return 0;}' > kpanic.c && printf 'obj-m += kpanic.o\nall:\n\tmake -C /lib/modules/$(Shell uname -r)/build M=$(PWD) modules' > Makefile && make && insmod kpanic.ko

panic関数を呼び出してカーネルをクラッシュさせるモジュールをコンパイルします。ルートが必要で、makegccが必要です

コマンドの「0x4ba4c73e73acce54でのバッファオーバーラン」を、よりドラマに興味深いものに置き換えます。

25
IW16

カーネルは何があっても実行し続けることを目的としています。したがって、ユーザーの操作によってカーネルパニックを引き起こす方法はすべてあります(Bruce Edigerが提案しているように、強力なrootによる意図的な破壊行為を除き、現在ほとんどのカーネルはビルドされているため、これらのいたずらのほとんどはそもそも機能しません)。 非常に深刻なバグ。

8
vonbrand

これが以前に言及されなかった理由がわかりません...

Sudo kill -9 1

「initを強制終了しようとしました」というメッセージのパニック。

5
NieDzejkob

これを試して:

dd if=/dev/urandom of=/proc/sysrq-trigger 


これは非常に高速なカーネルパニックを引き起こしましたが、ライブのUbuntuインストールでそれを実行したため、プロセスがどれほど安全かはわかりません。しかし、私が純粋なターミナル環境でそれをしたとき、カーネルは私にスパムエラーメッセージを出しました。

2
Josua Robson

最も簡単な方法は、Alt +印刷画面(sysrq)を押したまま、cを押したままにすることです。これはecho c > /proc/sysrq-triggerと同じです。簡単な説明:sysrqキーは、低レベルのコマンドをカーネル自体に送信するために使用されます、システムを保存しようとする最後の手段として。 alt + print screen(sysrq)を押したままそれらの隣にある別のキーを押すと、そのsysrq-triggerファイルでキーをエコーする場合と同じように動作します。彼らはそれをトリガーと呼びます; 3 'c'はカーネルにクラッシュを指示します(カーネルパニックの原因)

ただし、「proc/sys/kernel/sysrq」の内容を見たい場合があります。それが178またはその他の場合は、1に変更する必要があります。0はすべて無効、1はすべて有効、1より大きいものは、カーネルがsysrqで実行できる特定のことのためのビットマップです。

2
Yakusho

次のコードをモジュールにコンパイルしてinsmodしてください。パニックが発生するはずです。

static int crash_module_init(void)

{
     printf("crash module starting\n");
     int *p = 0;

     printk("%d\n", *p);

     return 0;
}

static void crash_module_exit(void)
{
    printf("crash module exiting\n");
}

module_init(crash_module_init);
module_exit(crash_module_exit);
1
Devendra Naga