GNU/Linux >> Znalost Linux >  >> Linux

Linuxové jádro dereference NULL-pointeru v memsetu z kzalloc

Hlavička se používá hlavně pro testování uživatelského prostoru, jako je virtio_test .

Z git-logu tools/virtio/virtio_test.c :

Toto je část nástroje pro uživatelský prostor:obsahuje spoustu útržků pro linuxová API, poněkud podobná linuxsched. To umožňuje překompilovat kód vyzvánění v uživatelském prostoru.

Je implementován malý testovací příklad, který kombinuje toto s vhost_testmodule.

Takže ano, kód je trochu nebezpečný (čisté kódování by testovalo NULL ukazatel před memset() a záchrana s příslušnou chybovou zprávou), ale protože se jedná pouze o testovací nástroj, zdá se, že bylo považováno za nekritické tento test přeskočit.


Ano, to rozhodně vypadá jako chyba.

tools/ podadresář je sbírka nástrojů uživatelského prostoru (jak název napovídá). Můžete to vidět také podle skutečnosti, že je zahrnuto několik záhlaví standardní knihovny C. Takže to samozřejmě není chyba jádra (to by bylo velmi špatné), jen menší přehlédnutí v virtio testovací nástroj.

To virtio Zdá se, že testovací nástroj předefinoval některá rozhraní API jádra, aby zesměšňoval jejich chování v uživatelském prostoru. Zdá se však, že tato funkce se v praxi nikdy nepoužívá, pouze je definována.

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$

Pravděpodobně je určen k použití někým, kdo chce otestovat nějaký virtio jaderný kód v uživatelském prostoru.

V každém případě můžete zkusit chybu nahlásit. get_mantainer.pl skript navrhuje:

$ 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:Podpora jmenných prostorů?

  2. Linux – Jsou různá jádra Linux/unix zaměnitelná?

  3. Jak načíst moduly jádra Linuxu z kódu C?

  1. Jak interně funguje copy_from_user z jádra Linuxu?

  2. Volání funkce uživatelského prostoru z modulu jádra Linuxu

  3. Jak mohu rezervovat blok paměti z jádra Linuxu?

  1. Linux – Musí být jádro kompilováno ve stejném vývojovém prostředí jako uživatelský prostor?

  2. Ovladač zařízení linuxového jádra na DMA ze zařízení do paměti uživatelského prostoru

  3. Co brání distribucím používat nejnovější linuxové jádro?