web-dev-qa-db-fra.com

Comment provoquer la panique du noyau avec une seule commande?

Est-il possible de provoquer une panique du noyau avec une seule ligne de commande?

Quelle serait la commande la plus simple pour un utilisateur sudoing et quelle serait-elle pour un utilisateur régulier, le cas échéant?

Les scénarios qui suggèrent de télécharger quelque chose dans le cadre de la commande ne comptent pas.

66
Desmond Hume

FreeBSD:

sysctl debug.kdb.panic=1

Linux (plus d'informations dans la documentation du noya ):

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

Compile un module qui plante le noyau en appelant la fonction panic, a besoin de root, requiert make et gcc

Remplacez le "dépassement de tampon à 0x4ba4c73e73acce54" dans la commande par quelque chose d'intéressant pour plus de drame.

25
IW16

Le noyau est censé continuer à fonctionner quoi qu'il arrive. Donc, tout moyen de provoquer une panique du noyau par interaction de l'utilisateur (autre que le vandalisme délibéré par une racine tout-puissant, comme le propose jokinkly Bruce Ediger, et la plupart des noyaux aujourd'hui sont construits de sorte que la plupart de ces farces ne fonctionneront pas en premier lieu) est un extrêmement bug grave, qui serait rapidement corrigé.

8
vonbrand

Je ne sais pas pourquoi cela n'a pas été mentionné auparavant ...

Sudo kill -9 1

Panique avec le message "a essayé de tuer init".

5
NieDzejkob

Essaye ça:

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


. Mais le noyau m'a envoyé des messages d'erreur de spam lorsque je l'ai fait dans l'environnement terminal pur.

2
Josua Robson

La chose la plus simple est de maintenir la touche alt + print screen (sysrq) enfoncée et d'appuyer sur c tout en les maintenant. Cela fait la même chose que echo c > /proc/sysrq-trigger Une petite explication: la clé sysrq est utilisée pour envoyer des commandes de bas niveau au noyau lui-même, en dernier recours pour essayer de sauver le système. Si vous maintenez alt + print screen (sysrq) enfoncé et appuyez sur une autre touche à côté d'eux, cela fait la même chose que si vous deviez faire écho à la touche dans ce fichier sysrq-trigger. Ils l'appellent déclencheur pour une raison; 3 Le 'c' dit au noyau de planter (provoquer une panique du noyau)

Cependant, vous voudrez peut-être voir le contenu de 'proc/sys/kernel/sysrq'. Si c'est 178 ou quoi que ce soit d'autre, vous devez le changer en 1. 0 est tout désactivé, 1 est tout activé, et tout ce qui dépasse 1 est un bitmap pour les choses spécifiques que le noyau permet de faire avec sysrq.

2
Yakusho

compilez le code suivant dans un module et insmodez-le, assurez-vous de paniquer:

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