タスク
にシステムコールでUID/GIDのチェックがRCUクリティカルセクションで実行されていることを確認してください。特別なユーザ( "root"や "pi"など)がそれを発行した場合にのみ呼び出されるようにシステムコールを修正したいと思います。それ以外の場合、呼び出しは本体の大部分をスキップして成功を返します。私は消費電力メトリックを生成するための追加のシステムコールを実装して、私のラズベリーパイ2のために書いた小さなカーネルモジュールを持っている
背景作業
私は長さで問題に読み込まれ、I've found a similar question on SOが、私の観点からそれで多くの問題は、(以下に記載)がありました。
質問
リンク質問がlinux/sched.h
とlinux/cred.h
で定義されているようstruct task_struct
は、struct cred
へのポインタ要素が含まれていることを指摘しています。 2つのヘッダーの後者は私のシステムには存在しません。前者は、struct cred
要素へのポインターの宣言を表示しません。 これは意味がありますか?- 愚かな間違い。これはカーネルヘッダー全体(つまり、
/usr/src/linux-headers-$(uname -r)/include/linux/cred.h
)にあり、gcc-buildヘッダーでは/usr/include/linux
を探していました。上記は、働いていた場合であっても
- 愚かな間違い。これはカーネルヘッダー全体(つまり、
私はthe real, effective, or saved UID for the processを取得するならば、それは言及していません。 これらの3つの値をシステムコールから得ることさえできますか?cred.h
には、すでにこれらがすべて含まれています。
迅速ユーザーが/etc/group
を解析せずに属しているグループを決定するために、カーネルモジュール内の安全な方法はありますか?cred.h
には、すでにこれらがすべて含まれています。プロセスを反復処理し、処理の 資格情報を読み取りがRCUの下で行われるべきであること、注:更新が
だから、唯一の有効な疑問が残り
は以下のとおりです。重要なセクション。
...
どのように私は私のチェックは、このクリティカルセクションで実行されていることを確認していますか?どのようにこれを達成するための実例がありますか?I've found some existing kernel documentation that instructs readers to wrap the relevant code withrcu_read_lock()
andrcu_read_unlock()
.struct cred
および/またはstruct task_struct
のデータ構造に対して読み取り操作をラップするだけでよいですか?
良い読み。ありがとうございました。 – DevNull
'/ proc'はプロセス情報です。いくつかの古いものもありますが、プロセス関連ではない新しいものは '/ sys'の下にあるはずです。 – Gilles