GNU/Linux >> Tutoriales Linux >  >> Linux

Falta de referencia del puntero NULL del kernel de Linux en memset de kzalloc

El encabezado se usa principalmente para pruebas de espacio de usuario, como virtio_test .

Del git-log de tools/virtio/virtio_test.c :

Esta es la parte del espacio de usuario de la herramienta:incluye un montón de stubs para las API de Linux, algo similar a linuxsched. Esto hace posible volver a compilar el código de llamada en el espacio de usuario.

Se implementa un pequeño ejemplo de prueba combinando esto con vhost_testmodule.

Entonces, sí, el código es un poco inseguro (la codificación limpia probaría un NULL puntero antes de memset() y rescatar con un mensaje de error apropiado), pero dado que es solo una herramienta de prueba, parece que no se consideró crítico omitir esta prueba.


Sí, eso definitivamente parece un error.

El tools/ subdirectorio es una colección de herramientas de espacio de usuario (como sugiere el nombre). También puede ver esto por el hecho de que se incluyen varios encabezados de biblioteca estándar de C. Entonces, por supuesto, esto no es un error del kernel (que habría sido muy malo), solo un pequeño descuido en el virtio herramienta de prueba.

Ese virtio La herramienta de prueba parece redefinir algunas API del kernel para burlarse de su comportamiento en el espacio de usuario. Sin embargo, esa función no parece usarse nunca en la práctica, simplemente se define.

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$

Probablemente esté destinado a ser utilizado por alguien que desee probar algún código del núcleo virtio en el espacio de usuario.

En cualquier caso, podría intentar reportar el error. El get_mantainer.pl el guión sugiere:

$ 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 – Kernel:¿Soporte de espacios de nombres?

  2. Llame a una función de espacio de usuario desde un módulo del kernel de Linux

  3. ¿Por qué proteger el kernel de Linux del usuario root?

  4. ¿Por qué se implementa el servidor NFS de Linux en el kernel en lugar del espacio de usuario?

  5. ¿Qué impide que las distribuciones utilicen el último kernel de Linux?

Comando Dmesg en Linux

Comando Sysctl en Linux

¿Linux es un sistema operativo o un kernel?

Núcleo de Linux vs. Núcleo de Mac

Cómo construir el kernel de Linux desde cero

Cómo compilar el kernel de Linux desde el origen para crear un kernel personalizado