GNU/Linux >> Tutoriels Linux >  >> Linux

Déréférencement du pointeur NULL du noyau Linux dans memset à partir de kzalloc

L'en-tête est principalement utilisé pour les tests de l'espace utilisateur, comme virtio_test .

Depuis le git-log de tools/virtio/virtio_test.c :

Il s'agit de la partie espace utilisateur de l'outil :elle comprend un tas de stubs pour les API Linux, quelque peu similaires à linuxsched. Cela permet de recompiler le ring code en espace utilisateur.

Un petit exemple de test est implémenté en le combinant avec vhost_testmodule.

Alors oui, le code est un peu dangereux (un codage propre testerait un NULL pointeur avant memset() et renflouer avec un message d'erreur approprié), mais comme il ne s'agit que d'un outil de test, il semble avoir été considéré comme non critique de sauter ce test.


Oui, cela ressemble vraiment à un bug.

Le tools/ Le sous-répertoire est une collection d'outils de l'espace utilisateur (comme son nom l'indique). Vous pouvez également voir cela par le fait que plusieurs en-têtes de bibliothèque standard C sont inclus. Donc, bien sûr, ce n'est pas un bogue du noyau (cela aurait été très mauvais), juste un oubli mineur dans le virtio outil de test.

Ce virtio L'outil de test semble redéfinir certaines API du noyau pour simuler leur comportement dans l'espace utilisateur. Cette fonction ne semble cependant jamais être utilisée dans la pratique, juste simplement définie.

marco:~/git/linux/tools/virtio$ grep -r kzalloc
linux/kernel.h:static inline void *kzalloc(size_t s, gfp_t gfp)
ringtest/ptr_ring.c:static inline void *kzalloc(unsigned size, gfp_t flags)
marco:~/git/linux/tools/virtio$

Il est probablement destiné à être utilisé par quelqu'un qui souhaite tester du code du noyau virtio dans l'espace utilisateur.

Dans tous les cas, vous pouvez essayer de signaler le bogue. Le get_mantainer.pl le script suggère :

$ perl scripts/get_maintainer.pl -f tools/virtio/linux/kernel.h
Bad divisor in main::vcs_assign: 0
"Michael S. Tsirkin" <[email protected]> (maintainer:VIRTIO CORE AND NET DRIVERS)
Jason Wang <[email protected]> (maintainer:VIRTIO CORE AND NET DRIVERS)
[email protected] (open list:VIRTIO CORE AND NET DRIVERS)
[email protected] (open list)

Linux
  1. Linux - Le noyau doit-il être compilé dans le même environnement de développement que l'espace utilisateur ?

  2. Linux – Les différents noyaux Linux/unix sont-ils interchangeables ?

  3. Pourquoi protéger le noyau Linux de l'utilisateur root ?

  4. Comment puis-je réserver un bloc de mémoire à partir du noyau Linux ?

  5. Pourquoi le serveur Linux NFS est-il implémenté dans le noyau plutôt que dans l'espace utilisateur ?

Commande Dmesg sous Linux

Commande Sysctl sous Linux

Linux est-il un système d'exploitation ou un noyau ?

Le noyau Linux contre. Mac noyau

Comment construire le noyau Linux à partir de zéro

Comment compiler le noyau Linux à partir de la source pour créer un noyau personnalisé