GNU/Linux >> Belajar Linux >  >> Linux

Dereferensi NULL-pointer kernel Linux di memset dari kzalloc

Header terutama digunakan untuk pengujian ruang pengguna, seperti virtio_test .

Dari git-log tools/virtio/virtio_test.c :

Ini adalah bagian ruang pengguna dari alat ini:ini mencakup banyak stub untuk API Linux, agak mirip dengan linuxsched. Ini memungkinkan untuk mengkompilasi ulang kode dering di ruang pengguna.

Contoh pengujian kecil diimplementasikan dengan menggabungkan ini dengan vhost_testmodule.

Jadi ya, kodenya agak tidak aman (coding yang bersih akan menguji NULL penunjuk sebelum memset() dan keluar dengan pesan kesalahan yang sesuai), tetapi karena ini hanyalah alat pengujian, tampaknya dianggap tidak penting untuk melewati pengujian ini.


Ya, itu pasti terlihat seperti bug.

tools/ subdirektori adalah kumpulan alat ruang pengguna (seperti namanya). Anda juga dapat melihat ini dengan fakta bahwa beberapa header pustaka standar C disertakan. Jadi ini tentu saja bukan bug kernel (yang akan sangat buruk), hanya kesalahan kecil di virtio alat pengujian.

virtio itu alat pengujian tampaknya mendefinisikan ulang beberapa API kernel untuk meniru perilaku mereka di ruang pengguna. Fungsi itu sepertinya tidak pernah digunakan dalam praktik, hanya didefinisikan.

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$

Ini mungkin dimaksudkan untuk digunakan oleh seseorang yang ingin menguji beberapa kode kernel virtio di ruang pengguna.

Bagaimanapun, Anda dapat mencoba melaporkan bug tersebut. get_mantainer.pl skrip menyarankan:

$ 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. Mengapa melindungi kernel Linux dari pengguna root?

  2. Linux Kernel ROP - Kembali ke userland dari konteks kernel?

  3. Bagaimana saya bisa memesan satu blok memori dari kernel Linux?

  1. Linux – Kernel:Dukungan Namespaces?

  2. Mengapa server Linux NFS diimplementasikan dalam kernel sebagai lawan dari ruang pengguna?

  3. Apa yang mencegah distribusi menggunakan kernel Linux terbaru?

  1. Linux – Apakah Kernel Perlu Dikompilasi di Lingkungan Dev yang Sama Dengan Userspace?

  2. Linux – Apakah Kernel Linux/unix yang Berbeda Dapat Dipertukarkan?

  3. Driver perangkat kernel Linux ke DMA dari perangkat ke memori ruang pengguna