Comment provoquer la panique du noyau avec une seule commande?

62

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 pressentant et quelle serait-elle pour un utilisateur normal, le cas échéant?

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

Desmond Hume
la source
11
:(){ :|:& };:peut être?
Carl
@carleeto Ok, pourriez-vous expliquer cela à nous?
Chad Harrison
14
@hydroparadise C'est ce qu'on appelle une "forkbomb". :()définit une fonction appelée :avec le corps de :|:&, signifiant "run: et aussi run: in the background". ;termine la définition de la fonction et :appelle votre nouvelle fonction, qui génère sans cesse de nouvelles versions d'elle-même jusqu'à ce que vous atteigniez les limites du processus ou que le système s'arrête. C'est une commande qui gèle efficacement tout système sans définir correctement les limites du processus. N'essayez pas ca a la maison.
Phoshi
1
@ Kevin Vous voulez dire écrire un programme C, le compiler et l'installer en tant que pilote, le tout dans une seule ligne de commande? Un exemple de travail serait génial.
Desmond Hume
1
Une forkbomb ne provoque pas nécessairement une panique du noyau. OTOH, une chose qui peut être faite est d’écrire (en tant que root), c’est-à-dire dd if=/dev/urandom of=/dev/mem(selon la version de votre noyau, il se peut que vous n’en ayez pas /dev/kmem). Mais je n'utiliserais plus le système après cela. :)
vendredi

Réponses:

80

FreeBSD:

sysctl debug.kdb.panic=1

Linux (plus d'infos ici ):

echo c > /proc/sysrq-trigger
artyom
la source
8
echo c > /proc/sysrq-triggerfait un bon travail en gelant un système Linux. Mais personnellement, un vieil écran noir de la mort relatant un développement spectaculaire de la pile d’appel donnerait l’impression d’une panique plus «canonique» du noyau.
Desmond Hume
4
Sous Linux, vous devrez peut-être echo 1 > /proc/sys/kernel/sysrqavant de pouvoir echo c > /proc/sysrq-trigger.
Christian
comment dans OpenBSD?
Mykhal
Quand il faut prouver à quel point un morceau innocent est défectueux, cela pourrait être utile ...
nemesisfixx
@mykhal Voir man.openbsd.org/ddb Cela décrira comment entrer le débogueur du noyau sur OpenBSD.
Kusalananda
24
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 bloque le noyau en appelant la panicfonction, nécessite root, requiert makeet gcc

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

IW16
la source
4
Ce code source semble assez inoffensif.
Mark Lakata
Cela a provoqué un crash du noyau, mais comment pouvez-vous lui dire de vider la mémoire et de redémarrer? Raspbian vient de me raccrocher avec ça.
HeatfanJohn le
Mise à jour: Il me semble que je dois faire apt-get install kdump-toolssur Raspbian / Debian.
HeatfanJohn le
8

Le noyau est conçu pour continuer à fonctionner quoi qu'il arrive. Donc, toute façon de provoquer une panique dans le noyau par interaction de l'utilisateur (autre que le vandalisme délibéré par une racine toute puissante, comme le propose jokinkly Bruce Ediger, et la plupart des noyaux actuels sont construits de sorte que la plupart de ces farces ne fonctionneront pas à bug extrêmement sérieux, qui serait corrigé rapidement.

vonbrand
la source
Eh bien, le noyau n’est plus très utilisé lorsque le système a été complètement gelé par un utilisateur non soudain qui a émis une commande à l’image de :(){ :|:& };:.
Desmond Hume
4
@DesmondHume Une bonne installation ne plante pas à cause d'un trop grand nombre de processus. Regardez dans le /etc/security/limits.conffichier.
Vreality
4

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

sudo kill -9 1

Panics avec le message "essayé de tuer init".

NieDzejkob
la source
N'a rien fait sur mon système de test ...
kgutwin
@kgutwin quel noyau utilisiez-vous sur votre système de test?
NieDzejkob
2

Essaye ça:

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


Cela a provoqué chez moi une panique très rapide du noyau, mais je ne suis pas sûr de la sécurité du processus car je l’ai fait lors de l’installation en direct d’Ubuntu. Mais le noyau m'envoyait des messages d'erreur de spam quand je le faisais dans l'environnement terminal pur.

Josua Robson
la source
2
Pourquoi est-il voté? Cela répond à la question posée.
Josua Robson
1
Le problème avec celui-ci est qu'il peut potentiellement exécuter la commande pour mettre fin à tous les processus utilisateur avant d'écrire «c» dans le fichier.
utilisateur
1

compilez le code suivant dans un module et insmodez-le, vous devriez vraiment avoir la panique:

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);
Devendra Naga
la source
2
Cela provoquera une oopspanique, mais pas.
SkyDan
1

Le plus simple est de maintenir alt + print screen (sysrq) et d’appuyer sur c tout en les maintenant. C’est la même chose qu’une echo c > /proc/sysrq-trigger 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 la touche alt + print screen (sysrq) enfoncée et que vous appuyez sur une autre touche à côté de celle-ci, la procédure est la même que si vous deviez afficher la clé dans le fichier sysrq-trigger. Ils l'appellent le déclencheur pour une raison 3; le "c" indique au noyau de se bloquer (cause d'une panique du noyau).

Cependant, vous voudrez peut-être voir le contenu de 'proc / sys / kernel / sysrq'. Si c'est le numéro 178 ou autre, vous devez le remplacer par 1. 0 est tout désactivé, 1 est activé et tout élément supérieur à 1 est un bitmap correspondant aux tâches spécifiques que le noyau permet de faire avec sysrq.

Yakusho
la source
1
Vous pouvez également taper lentement «REISUB» en maintenant ces touches magiques enfoncées pour redémarrer votre ordinateur lorsqu'il est complètement gelé sous Linux. Changer le mode de clavier en Xlate || E-envoyer SigTerm à tous les processus || J'envoie SigKill à tous les processus (sauf init bien sûr) || S- sync tous les lecteurs montés || U-Remount tous les périphériques en lecture seule || B- redémarre instantanément sans qu'aucun processus ne soit tué ou démonté (ce que nous avons pris soin de environ avant). Vous pouvez également utiliser O au lieu de B pour arrêter au lieu de redémarrer; D passez un bon moment à faire planter votre système
Yakusho