web-dev-qa-db-ja.com

Linuxでvdsoを作成する

現在、独自のVDSOを実装しようとしています。私はこれを見てきました このチュートリアル これはこれを行う方法を説明しています。

ただし、このチュートリアルはLinux 2.6.x用に作成されており、Linux4.8.xで使用したいと思います。しかし、このバージョン以降、vdsoのアーキテクチャ構造は大きく変更されており(たとえば、vextern.hは抑制されています)、それを機能させるためにどのように適応させるかがわかりません。

このチュートリアルを最近のカーネルに適応させる方法や、vdsoに関する十分なリソースを見つけて独自のカーネルを実装できる場所を知っていますか?

また、任意のシステムコールの動作をVDSOとして単純に再現できるかどうか知っていますか?私はそれがセキュリティの観点から非常に悪い考えであることを知っています(そしてパフォーマンスの向上はごくわずかです)

2
Maxime B.

同じスタイルの更新されたチュートリアルがあるかどうかはわかりませんが、変更は制限されています。

後者は、Arch/x86/include/asm/vvar.hマクロを使用して、固定オフセットでDECLARE_VVARに変数を1回宣言するだけでよいことを意味します。それを定義するには、DEFINE_VVARマクロを使用します。アクセスするには、VVARマクロを使用します。上記のリンクされたコミットには、いくつかの例があります(共有変数の既存のすべての使用法)。

少なくともカーネルモードでカーネルを呼び出さない限り、vDSOで任意のシステムコールの動作を再現することはできません。 vDSOは、ユーザースペースで処理できる呼び出しにのみ本当に役立ちます。それらの多くはありません。

1
Stephen Kitt