vDSO (virtual dynamic shared object) は、注意深く選択された kernel space ルーチン群を、user space 上のアプリケーションにエクスポートするための、カーネルメカニズムである。これにより、アプリケーションは、それらカーネル空間ルーチンを、システムコール インタフェースを使用して、それらの同じカーネル空間ルーチンを呼び出す時に固有の、user mode から カーネルモード への コンテキストスイッチ によるパフォーマンス低下なしに、プロセス内で呼び出せる。[1][2]

vDSO は、リンクロード に標準のメカニズムを使用する。すなわち、標準の Executable and Linkable Format (ELF) 形式である。[3][4] vDSO は、いくつかのカーネル機能を公開する、ユーザ空間に割り当てられたメモリ領域である。vDSO iは dynamically allocated、offers improved safety through アドレス空間配置のランダム化 を使って安全性が向上され、4つ以上のシステムコールをサポートする。glibc のようないくつかの 標準Cライブラリ は vDSO リンクを提供するため、カーネルが vDSO をサポートしていない場合は、従来からの システムコール が作成される。[5] vDSO は単純なカーネルルーチン呼び出しオーバヘッドを削減するのに役立ち、IA-32 のようなある種の コンピュータ・アーキテクチャ では、最適なシステムコールメソッドを選択する方法としても機能する。[6] 他の方補よりも優れている点は、エクスポートされたルーチンが、適切な DWARF (Debug With Attributed Record Format) デバッグ情報を提供出来ることである。実装は一般的に、vDSO を見つけるための、ダイナミックリンカ中のフックを示している。

vDSO は vsyscall 機能を、その制限を克服して提供するために開発された。すなわち、4つのシステムコールしか使えない statically allocated 少量のメモリ、各プロセスで同一アドレスの アプリケーションバイナリインタフェース (ABI) によるセキュリティの妥協である。このセキュリティ問題は en:emulating a virtual system callによって緩和されたが、エミュレーションにより遅延が増加する。[5]

参照 編集

  1. ^ Enrico Perla; Massimiliano Oldani (16 December 2016) (ドイツ語). Kernel Hacking: Exploits verstehen, schreiben und abwehren: Schwachstellen in Kernel-Architekturen erkennen und Gegenmaßnahmen ergreifen. Franzis Verlag. pp. 466–. ISBN 978-3-645-20503-0. https://books.google.com/books?id=9cZ2DwAAQBAJ&pg=PA466 
  2. ^ vDSO - overview of the virtual ELF dynamic shared object”. Canonical. 2016年3月4日時点のオリジナルよりアーカイブ。2015年12月10日閲覧。
  3. ^ Creating a vDSO: the Colonel's Other Chicken”. Linuxjournal.com. 2015年2月16日閲覧。
  4. ^ On vsyscalls and the vDSO”. Lwn.net. 2015年2月16日閲覧。
  5. ^ a b Community answer to question "What are vDSO and vsyscall?"”. 2016年11月19日閲覧。
  6. ^ Anatomy of a system call, part 2”. Lwn.net. 2018年11月19日閲覧。