GNU/Linux >> Linux の 問題 >  >> Linux

kzalloc からの memset での Linux カーネルの NULL ポインター逆参照

ヘッダーは、主に virtio_test などのユーザー空間のテストに使用されます .

tools/virtio/virtio_test.c の git-log から :

<ブロック引用>

これは、ツールのユーザー空間部分です。これには、Linux API 用のスタブが含まれており、linuxsched に多少似ています。これにより、リング コードをユーザー空間で再コンパイルすることが可能になります。

これを vhost_testmodule と組み合わせた小さなテスト例が実装されています。

そうです、コードは少し安全ではありません (クリーンなコーディングは NULL をテストします) memset() より前のポインター 適切なエラー メッセージで救済されます) が、これは単なるテスト ツールであるため、このテストをスキップすることは重要ではないと考えられていたようです。


はい、間違いなくバグのようです。

tools/ サブディレクトリは、ユーザー空間ツールのコレクションです (名前が示すように)。これは、いくつかの C 標準ライブラリ ヘッダーが含まれていることからもわかります。したがって、これはもちろんカーネルのバグではありません (これは非常に悪いことでした)。virtio テスト ツールです。

その virtio テスト ツールは、一部のカーネル API を再定義して、ユーザー空間での動作を模倣しているようです。ただし、その関数は実際には使用されていないようで、単に定義されているだけです。

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$

おそらく、ユーザー空間でいくつかの virtio カーネル コードをテストしたい人が使用することを意図しています。

いずれにせよ、バグを報告してみてください。 get_mantainer.pl スクリプトの提案:

$ 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. CコードからLinuxカーネルモジュールをロードする方法は?

  2. Linux カーネルの copy_from_user は内部でどのように機能しますか?

  3. Linux カーネル モジュール内からユーザー空間関数を呼び出す

  1. Linux カーネル ROP - カーネル コンテキストからユーザーランドに戻る?

  2. Linux カーネルからメモリのブロックを予約するにはどうすればよいですか?

  3. ディストリビューションが最新の Linux カーネルを使用できない原因は何ですか?

  1. Linux –カーネルはユーザースペースと同じ開発環境でコンパイルする必要がありますか?

  2. Linux –異なるLinux / UNIXカーネルは交換可能ですか?

  3. デバイスからユーザー空間メモリーへの DMA への Linux カーネル デバイス ドライバー