---
title: Intel SGXのout-of-treeドライバをLinux 6.15に移植した話
tags: 
author: [山田ハヤオ](https://www.docswell.com/user/hayao)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/GEWZXM53E2.jpg?width=480
description: Intel SGXのout-of-treeドライバをLinux 6.15に移植した話 by 山田ハヤオ
published: August 14, 25
canonical: https://www.docswell.com/s/hayao/ZEYWMG-sgx-driver
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/GEWZXM53E2.jpg)

の
SGX out-of-tree
ドライバを移植した話
1


# Page. 2

![Page Image](https://bcdn.docswell.com/page/47Z16QNGJ3.jpg)

$ whoami
名前: 山田ハヤオ
大学: 群馬大学情報学部 千田研究室3年
専門: TEE
趣味: ロードバイク, CTF, ArchLinux, シェルスクリプト, ジャンクPC, PC-98集め
技術: Next.js, Go, Bash, PHP, Rust, C++
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/YJ6L268QEV.jpg)

と
TEE Intel SGX
の概要
TEE(Trusted Execution Environment)
とは
専用のハードウェアによって秘密計算を行えるようにする技術でPETsの1つ。
準同型暗号や秘密分散は速度や運用において発展途上→最も実用的な秘密計算の手法。
速い
CPUベンダーを信用しないといけない
主な脅威モデルはOSカーネル/UEFI/マザーボード/メモリ/システム管理者
https://qliphoth.io/media/2024-1-what-is-tee.pdf
Intel SGX
とは
Intelの一部のCPUに搭載されているTEEの実装の1つで、最もメジャーで広く研究されている。
2025 L3ゼミ「TEEスクラップ&amp;ビルドゼミ」ではIntel SGXでアプリを構築し破壊する。
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/GJ51269274.jpg)

大まかな仕組み
CPU
とメモリ
SGXを扱うための専用の命令( ENCLS , ENCLU )
Enclaveと呼ばれる秘密計算領域をRAM上に確保して計算を行う
https://qliphoth.io/media/2024-2-intel-sgx-basics.pdf
OS
SGXの機能とプロセスの通信をカーネルランドに実装し、橋渡しを行うのがSGX Driver
In-kernel Driver
最新の機能(DCAP/FLC)にのみ対応し、最近のXeonでしか使えない
https://github.com/torvalds/linux/tree/2b38afce25c4e1b8f943ff4f0a2b51d6c40f2ed2/arch/x8
6/kernel/cpu/sgx
Out-of-tree Driver
古い機能(EPID/LE)しか対応していないCPU(6th~10th)用のドライバ
https://github.com/intel/linux-sgx-driver
Xeonは
高い!! 古いCPU(Intel 第6世代 i5)でもSGXを使いたい!!
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/LE31KQY175.jpg)

out-of-tree
ドライバを現代のマシンでコンパイルする
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/8EDX395KJG.jpg)

コンパイルエラーの中身
一旦公式に出されているPRを全てマージしてエラーが変化しないか確認してみる。
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/V7PP4ZG378.jpg)

手修正
1. wrmsr_safe
の関数名変更
sgx_main.c:189:13: エラー: implicit declaration of function ‘wrmsrl_safe’; did you mean ‘wrmsr_safe’? [-Wimplicit-function-declaration]
189 |
if (wrmsrl_safe(MSR_IA32_SGXLEPUBKEYHASH0, 0xa6053e051270b7acULL) ||
|
^~~~~~~~~~~
wrmsr_safe
はMSRへ値の書き込みを行うための関数。 wrmsrl_safe が wrmsrq_safe にリネームされたらしい。
https://patchew.org/linux/174457057849.31282.1557821601937809402.tip-bot2@tip-bot2/
2. get_unmapped_area
の廃止
sgx_main.c:145:27: エラー: ‘struct mm_struct’ は ‘get_unmapped_area’ という名前のメンバを持っていません
145 |
addr = current-&gt;mm-&gt;get_unmapped_area(file, addr, 2 * len, pgoff,
|
^~
ユーザー空間へメモリ割り当てをカーネルが行う際に、空いてるアドレスを返す関数。
かつては mm_struct (プロセスが1つ持ってるメモリ構造の情報)の中で定義されていた関数だったが、グ
ローバルの mm_get_unmapped_area に変更になった。
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/2JV2XW6NJQ.jpg)

その他の変更
DKMSに対応した
Dynamic Kernel Module Supportの略称。カーネルの外にあるドライバについて、カーネルが更
新されたタイミングで自動で更新を行ってくれる便利なシステム。
Clang Formatを導入した。
ソースコードを見た感じ一定のルールで整形されているようには見えなかったが、Intel社内でな
にかルールがあるわけではないのか?
成果物
https://github.com/hayao0819/linux-sgx-driver
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/5EGRVDN5JL.jpg)

現状
/dev/isgx
と /dev/mei0 が作成され、無事にLinux 6.15で正常に起動できた。
しかしEnclaveの起動はできず。Launch Enclave周りで問題が起きているのではないか。
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/4JQV61QL7P.jpg)

終わりに
L3講師の櫻井さんに協力して頂いております。Enclave起動まで頑張っていきます。
参考文献
TEEの概要とSGXについて
https://www.docswell.com/s/hayao/59VPEY-sgx
セキュリティキャンプ L3ゼミ講義資料(2024&amp;2025)
https://qliphoth.io/seccamp/
https://patchew.org/linux/174457057849.31282.1557821601937809402.tip-bot2@tip-bot2/
https://www.kernel.org/doc/html/v6.16/arch/x86/sgx.html
https://www.kernel.org/doc/html/v6.16/core-api/mm-api.html
10


