BPFプログラムの作成方法、BPFの検証器、JITコンパイル機能Berkeley Packet Filter(BPF)入門(3)(3/3 ページ)

» 2018年12月26日 05時00分 公開
[味曽野雅史OSSセキュリティ技術の会]
前のページへ 1|2|3       

JITコンパイル機能

 BPFは以下のアーキテクチャでJITコンパイルをサポートしています。

アーキテクチャ 対応カーネル
x86-64 3.16
ARM 64 3.18
s390 4.1
PowerPC 64 4.8
SPARC 64 4.12
MIPS 4.13
ARM 32 4.14
x86-32 4.18

 JIT機能を利用する場合、「CONFIG_BPF_JIT」「CONFIG_HAVE_EBPF_JIT」カーネルオプションを有効化する必要があります。また、「CONFIG_BPF_JIT_ALWAYS_ON」オプションを有効化した場合、常にJITでBPFが実行されるようになり、カーネルのコードからBPFインタープリタが除去されます。

 これは、PoCで、BPFインタープリタのコードがガジェットとして利用されてしまったSpectre Variant 2対策の一環として導入された機能です

 なお、Spectre Variant 1のPoCでもeBPFが利用されていましたが、このときはJIT化されたコードを投機実行させていたため、JITの無効化が有効な対策の一つとなります。

 JITの機能は以下のprocfsからコントロールできます

  • 「/proc/sys/net/core/bpf_jit_enable」
    • 0:disable
    • 1:JIT有効
    • 2:デバッグモード。JITコンパイル結果をダンプする(「dmesg」で確認できる)
      • 「CONFIG_BPF_JIT_ALWAYS_ON」が有効な場合利用不可
      • tools/bpf/bpf_jit_diasm.c」によりJITの結果をディスアセンブル可能
  • 「proc/sys/net/core/bpf_jit_harden」
  • 「/proc/sys/net/core/bpf_jit_kallsyms」
    • 0:disable
    • 1:「/proc/kallsysm」にJIT化されたプログラムのシンボルをエクスポート
      • perfなどのツールからスタックトレースが取得可能
      • 「bpf_jit_harden」が有効のとき、この機能は使用不可

 eBPFのJITコンパイラのコード(x86)は「arch/x86/bpf_jit_comp.c」にあります。もともとeBPFのアーキテクチャはJITがしやすいように設計されており、基本的にeBPF命令は1つのCPU命令に対応して変換されています。

次回はネットワークに関連したBPFの利用について

 今回はBPFの基礎として、BPFプログラムの作成方法、BPFの検証器、JITコンパイル機能などについて説明しました。

 次回以降、本格的にBPFの機能を使っていきます。次回はネットワークに関連したBPFの利用について取り上げる予定です。

鬯ゥ謳セ�ス�オ�ス�ス�ス�コ鬯ョ�ヲ�ス�ョ髯キ�サ�ス�サ�ス�ス�ス�ソ�ス�ス�ス�ス鬯ッ�ッ�ス�ィ�ス�ス�ス�セ�ス�ス�ス�ス�ス�ス�ス�」鬯ッ�ョ�ス�エ髣費ソス�ス�・�ス�ス�ス�ウ�ス�ス�ス�ィ�ス�ス�ス�ス髯懶ス」�ス�、�ス�ス�ス�ク�ス�ス�ス�イ鬯ゥ蠅捺��ス�ソ�ス�ス�ス縺、ツ€�ス�ス�ス�ス�ス�ス�ス�」鬯ッ�ョ�ス�エ鬯ゥ蟶壽桶�ス�ュ鬮ョ�」�ス�ソ�ス�ス�ス�ス�ス�ィ鬮ッ蛹コ�サ繧托スス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�コ鬮」蛹�スス�オ髫エ謫セ�ス�エ�ス�ス隶難ス」�守「托スュ雜」�ス�「�ス�ス�ス�ス�ス�ス�ス�ゥ鬯ゥ蟷「�ス�「髫エ雜」�ス�「�ス�ス�ス�ス�ス�ス�ス�シ鬯ゥ蟷「�ス�「髫エ荳サ�ス隶捺サゑスソ�ス邵コ�、�つ€鬯ッ�ョ�ス�ヲ�ス�ス�ス�ェ鬩包スカ闔ィ�ス�ス�ヲ�ス�エ�ス縺、ツ€髯キ闌ィ�ス�キ�ス�ス�ス�ス�ス�ス�ス�サ鬯ッ�ッ�ス�ェ�ス�ス�ス�ュ�ス�ス�ス�ス�ス�ス�ス�イ鬯ゥ謳セ�ス�オ�ス�ス�ス�コ鬮ッ�キ�ス�キ�ス�ス�ス�カ�ス�ス�ス�ス�ス�ス�ス�ス New

筆者紹介

味曽野 雅史(みその まさのり)

東京大学 大学院 情報理工学系研究科 博士課程

オペレーティングシステムや仮想化技術の研究に従事。

前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

Linux �ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス OSS 鬯ッ�ョ�ス�ォ�ス�ス�ス�ェ鬮ッ蛹コ�サ繧托スス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�コ鬮」蛹�スス�オ髫エ竏オ�コ�キ�ス�ク�ス�キ�ス�ス�ス�ケ髫エ雜」�ス�「�ス�ス�ス�ス�ス�ス�ス�ウ鬯ゥ蟷「�ス�「�ス�ス�ス�ァ�ス�ス�ス�ス�ス�ス�ス�ュ鬯ゥ蟷「�ス�「髫エ雜」�ス�「�ス�ス�ス�ス�ス�ス�ス�ウ鬯ゥ蟷「�ス�「�ス�ス�ス�ァ�ス�ス�ス�ス�ス�ス�ス�ー

鬯ョ�ォ�ス�エ髯晢スキ�ス�「�ス�ス�ス�ス�ス�ス�ス�ャ鬯ョ�ォ�ス�エ鬯イ�ス�シ螟イ�ス�ス�ス�ス�ス�ス�ス�・鬯ョ�ォ�ス�エ髯晢スカ�ス�キ�ス�ス�ス�」�ス�ス�ス�ッ鬮」蜴�スス�ォ�ス�ス�ス�」

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。