GNU/Linux >> Linux Esercitazione >  >> Linux

Dereferenziazione del puntatore NULL del kernel Linux in memset da kzalloc

L'intestazione viene utilizzata principalmente per il test dello spazio utente, come virtio_test .

Dal git-log di tools/virtio/virtio_test.c :

Questa è la parte dello spazio utente dello strumento:include una serie di stub per le API di Linux, in qualche modo simili a Linuxsched. Questo rende possibile ricompilare il codice ring in userspace.

Un piccolo esempio di test è implementato combinandolo con vhost_testmodule.

Quindi sì, il codice è un po' pericoloso (un codice pulito testerebbe un NULL puntatore prima di memset() e salvare con un messaggio di errore appropriato), ma dal momento che si tratta solo di uno strumento di test, sembra che sia stato considerato acritico saltare questo test.


Sì, sembra proprio un bug.

Il tools/ la sottodirectory è una raccolta di strumenti dello spazio utente (come suggerisce il nome). Puoi anche vederlo dal fatto che sono incluse diverse intestazioni della libreria standard C. Quindi questo ovviamente non è un bug del kernel (sarebbe stato molto grave), solo una piccola svista nel virtio strumento di test.

Quel virtio lo strumento di test sembra ridefinire alcune API del kernel per deridere il loro comportamento nello spazio utente. Quella funzione però non sembra essere mai utilizzata nella pratica, solo semplicemente definita.

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$

Probabilmente è pensato per essere usato da qualcuno che desidera testare del codice del kernel virtio nello spazio utente.

In ogni caso, potresti provare a segnalare il bug. Il get_mantainer.pl lo script suggerisce:

$ 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:supporto per gli spazi dei nomi?

  2. Linux:il kernel deve essere compilato nello stesso ambiente di sviluppo dello spazio utente?

  3. Linux – I diversi kernel Linux/unix sono intercambiabili?

  4. Driver del dispositivo del kernel Linux a DMA da un dispositivo nella memoria dello spazio utente

  5. Come caricare i moduli del kernel Linux dal codice C?

Comando Dmesg in Linux

Comando Sysctl in Linux

Linux è un sistema operativo o un kernel?

Kernel Linux vs. Kernel Mac

Come costruire il kernel Linux da zero

Come compilare il kernel Linux dal sorgente per creare un kernel personalizzato