Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
終末何してますか? 忙しいですか? KOZOSもデバッグしてもらっていいですか? / KernelVm Hokuriku 3-2
Search
Toshifumi NISHINAGA
September 23, 2017
Programming
1
310
終末何してますか? 忙しいですか? KOZOSもデバッグしてもらっていいですか? / KernelVm Hokuriku 3-2
2017/09/23に第3回kernelVM北陸で発表した資料です。
KOZOS/RasPiでLuaを動かすためにどういうことがあったかをちょろっと紹介します。
Toshifumi NISHINAGA
September 23, 2017
Tweet
Share
More Decks by Toshifumi NISHINAGA
See All by Toshifumi NISHINAGA
SecurityCamp2023基板作るコース講義資料/Security Camp 2023 Lecture Materials
tnishinaga
7
2k
RP2040のPIOを使う話/KernelVM Hokuriku 6
tnishinaga
1
660
JTAGでArmプロセッサをデバッグする方法のつづき/KernelVM_Tokyo16
tnishinaga
0
250
CMSIS-DAPの概要と使い方/KernelVM Online5
tnishinaga
0
1.3k
JTAGでarmプロセッサをデバッグする話/KernelVM Online4
tnishinaga
4
2.5k
ARM入門/arm introduction
tnishinaga
15
11k
俺の仮想マシンルーターがこんなに遅いはずはない/ KernelVM online 1
tnishinaga
0
2.3k
BareMetalで遊ぶ Raspberry Pi 4 - GIC v2編-/BareMetal Raspberry Pi 4 - GICv2 -
tnishinaga
6
4.4k
ある日突然、 あなたにPowerPCマシンが届いたらどうしますか?/kernelvmtokyo15
tnishinaga
3
3.1k
Other Decks in Programming
See All in Programming
R言語の環境構築と基礎 Tokyo.R 112
bob3bob3
0
270
検証も兼ねて個人開発でHonoとかと向き合った話
hanetsuki
1
920
Komplexe Oberflächen mit SVG und der Web Animation API
joergneumann
0
670
MicrosoftのPlatform Engineeringガイドを読んで実際になにかやってみた
ymd65536
1
330
"config" ってなんだ? / What is "config"?
okashoi
0
240
Ruby Function Composition
bkuhlmann
1
330
使ってみよう Azure AI Document Intelligence
kosmosebi
2
310
dbtのドメイン分割による データ基盤の改善とDigdagとの連携
sakama
0
320
スキーマ駆動開発による品質とスピードの両立 - 私達は何故、スキーマを書くのか
kentaroutakeda
0
170
0→1と1→10の狭間で Javaという技術選定を振り返る/Reflecting on the Decision to Choose Java Between Scaling from 0 to 1 and 1 to 10
jaguar_imo
2
380
Blue/Greenデプロイの導入による 運用フローの改善
kudoas
1
380
Apache Hive 4 on Treasure Data
ryukobayashi
0
310
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
20
1.9k
How GitHub (no longer) Works
holman
304
140k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
6
1.5k
Building a Scalable Design System with Sketch
lauravandoore
456
32k
Building Better People: How to give real-time feedback that sticks.
wjessup
355
18k
Design by the Numbers
sachag
274
18k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
244
20k
A Tale of Four Properties
chriscoyier
151
22k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
14
1.6k
The Invisible Side of Design
smashingmag
294
49k
Bash Introduction
62gerente
604
210k
Done Done
chrislema
178
15k
Transcript
終末何してますか? 忙しいですか? 今度はKOZOSを デバッグしてもらって いいですか? 2017-09-23 KernelVM Hokuriku 3
$ who @tnishinaga
本日の内容 @ykyukinet さんの KOZOS/RasPi で Luaがちゃんと動くようになるまでの おっさん妖精の戦いの物語
2017-09-22 3:00ごろまでの話 • セキュリティキャンプでykyukiさんがKOZOS/RasPiでLuaを動 かせるようにした • しかしLua実行はできるが、実行後にOSが落ちる問題があっ た ◦ https://github.com/ykyuki/kozos-rpi-lua/commit/49cb3475a8d542a6130a9648213a17ae46f568
e3
$ 犯人(たぶん)
$ 犯人(たぶん)
OSが落ちた結果何処に行ってるか • 0x0004eae0という謎アドレスに飛んだ結果 Undefined fault
Undefined faultの詳細 • KOZOSのdispatch関数が謎メモリアドレスをプログラムカウ ンタ(pc)に書き戻す • 飛んだ先でデータを命令として実行しようとしてundefined exceptionが飛んでfault
KOZOSのスレッド生成とスレッドスタック • KOZOSはkz_run関数でスレッドを起動する • kz_run関数はスレッドが使うスタックサイズ上限を引数にとる • KOZOSは引数からスタックサイズ上限を調べてスレッドに割 り当てる thread stack
メモリ thread “cmd” kz_run(command_main, "cmd", 8, 0x200, 0, NULL); 0x200 byte
KOZOSのスレッドスタック配置 • スレッド生成時にスタック領域を0xffffffff方向に伸ばして確保 • 伸ばした先端をスレッドのスタックとして提供 thread stack メモリ thread1 thread2
thread3
KOZOSのスレッドスタックの中身 • 以下が入ってる ◦ プログラムの一時変数など ◦ スレッド切替時は保存されたレジスタ情報等 thread stack register
data char hoge; int i;
KOZOSでStack Overflowが起こるとどうなる • 別のスレッドのスレッド状態等を破壊する • 問題はdispatch時に発火 thread stack register data
char hoge; int i; register data char hoge; int i[]; thread stack register data char hoge; int i; register data char hoge; int i[];
問題の原因 • 一言で言えば Stack Buffer Overflow • スレッドに割り当てるスタックが少なかった • 割当スタックを8KBに増やしたら解決した
戦いの記録 https://github.com/ykyuki/kozos-rpi-lua/commits/master
おわりに 「Luaがエラーを起こすとOSが落ちる」
僕達の戦いはこれからだ!!