Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
SEGVなんてもういいですから OSC2016 Tokyo/Spring Linuxライトニングトーク @RKX1209
Slide 2
Slide 2 text
自己紹介 ● るくすと申します ● twitter:@RKX1209 ● 神戸大学 工学部 B3 ● 普段はセキュリティ - マルウェア解析,sandbox... ● OS, VMMなど低レイヤーなもの好き
Slide 3
Slide 3 text
突然ですがみなさんはこんなコードを書いた 事がありますか?
Slide 4
Slide 4 text
No content
Slide 5
Slide 5 text
実行結果 Segmentation fault (コアダンプ) 当たり前だよなぁ
Slide 6
Slide 6 text
なんとか実行させたい... なんとか実行させたくない? → よし SEGVを殺そうぜ!
Slide 7
Slide 7 text
Linuxカーネル SEGVをなくすには? → Linuxカーネルを弄るしか無い → SEGVを許してくれる仕組みを作ろうぜ! → 優しいOSの完成 → 平和の訪れ
Slide 8
Slide 8 text
不正アドレスの処理 1. 不正なアドレスへのアクセスが発生するとCPUが トラップ実行 2. Linuxがトラップを受けdo_page_faultを実行する 3. SEGVが発生したアドレスから、正常なページフォ ルトなのか、不正なアクセスなのか判断 4. 正常ならhandle_mm_faultでページフォルトを処 理 5. 不正ならSEGV発生
Slide 9
Slide 9 text
SEGVを殺す方法 ✔ 不正なアドレスでも正常な処理に飛ぶようにする ✔ 正常だと思ったLinuxはそのままページフォルトと して処理 ✔ 不正なアドレスにmmapで物理アドレスを割り当て る ✔ ぶっちゃけ仮想アドレスがどんな値 でも物理アドレスを割り当れば 何とかなる → バディシステムに圧倒的感謝
Slide 10
Slide 10 text
No content
Slide 11
Slide 11 text
SEGVを殺す時の注意 • mmapで物理アドレスを割り当てる時do_mmapを 使ってはいけない → do_page_fault実行時はプロセスのとあるスピ ンロックを既に使用している → do_mmapはこのスピンロックが解法されるまで 待つため、デッドロックが発生する • なのでスピンロックを使用しない do_mmap_pgoffを使いましょう
Slide 12
Slide 12 text
No content
Slide 13
Slide 13 text
実行結果 a やったね (スクショ撮り忘れましたorz)
Slide 14
Slide 14 text
ご清聴有難うございました 実際のパッチや詳細な説明は http://rkx1209.hatenablog.com/entry/2015/12/06/ 213912