問題タブ [bpf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
356 参照

bpf - BPF プログラムで常に 0 セッション ID を取得する

tty_writeカーネル関数を呼び出すプロセスのセッション ID を調べる BPF プログラムを作成しようとしています。現在の構造体からフィールドを取得することでこれを実行しようとしていますtask_struct。私のコードは次のとおりです。

clangELF ファイルを使用して BPF プログラムをコンパイルし、それをgobpf のELF パッケージでロードしていることに注意してください。残念ながら、 の値sessionidは常に 0 です。これはなぜですか? 4.11カーネルでbccを使用する前にこれを行ったので、セッションIDに間違ってアクセスしているとは思いません(bccがBPFプログラムを書き換える方法のため、プログラムを自分でコンパイルしたいときに同じコードを単純に使用することはできません)。にアクセスするための同等の作業 bcc コードsessionidは次のとおりです。これは 4.11 カーネルでのみ機能することに注意してください。次のコードは 4.13 カーネルでは機能しません。ただし、上記のコードはどちらのカーネルでも機能しません。

4.11 カーネル:

uname -a:Linux ubuntu16 4.11.0-14-generic #20~16.04.1-Ubuntu SMP Wed Aug 9 09:06:22 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

4.13 カーネル:

uname -a: Linux ubuntu1710 4.13.0-32-generic #35-Ubuntu SMP Thu Jan 25 09:13:46 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

0 投票する
1 に答える
969 参照

bpf - eBPF: Linux 名前空間での実行

したがってBPF、プログラムはカーネル空間内で実行されるため、カーネル エンティティです。一方、コンテナーとも呼ばれる Linux 名前空間は、アプリケーション レベルの分離を提供します。この場合、それらはすべてホストのカーネル、カーネル モジュールなどを共有します。

bpfホスト上でも見えるようになるので、コンテナごとにプログラムをロードするのは意味がないと思いますか?

bpfしたがって、プログラムはホストとモニター/マングルなどにロードされると思います。名前空間との間のパケット。struct sock名前空間 ID に関する情報があるとすれば、特定の種類のプログラムだけがbpfそれを実行できると思いますか?