Page 1

岡山カーネル勉強会 crashによるカーネル内部探索

ミラクル・リナックス株式会社 コアテクノロジー部 武田 保真 2006/08/05


VMware用環境の説明 

MIRACLE LINUX V4.0 – 最小構成インストール  

   

06/08/06

サーバ類のソフトはほとんど入っていません crash探索用に以下をインストール  kernel-2.6.9-34.21AX(SP1)  kernel-debuginfo-2.6.9-34.21AX  crash-4.0-2.22 Rootのパスワードはkernel sshでrootログイン可能 Diskdump設定済み Keyboardは日本語キーボード設定  /etc/sysconfig/keyboard jp106 <-> us で切り替え 可能 Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  

2


実行環境の準備 1. Vmware Player 、もしくは Vmware Workstationで MIRACLE40ディレクトリの構成ファイルを指定 2. VmwareでMIRACLE V4.0を起動 3. ユーザ root、パスワード kernelでログイン 4. 「/sbin/dhclient eth0」 を実行しDHCPアドレス取 得 5. 「/sbin/ifconfig」 でIPアドレスを確認 6. お気に入りの端末からsshでログイン

06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


crashの実行 書式 : crash <System.map> <vmlinux> <vmcore> * vmcoreを指定しないときは、稼働中カーネルのメモリ空間 - System.mapは通常 /boot配下に配置 - vmlinuxはML40/FC5などでは /usr/lib/debug/lib/modules/[カーネルバージョン]/vmlinux

06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


crashの起動(稼働中カーネル編) 

「uname -r」でカーネルバージョン確認 

2.6.9-34.21AX

kernel-debuginfoがインストールされていて、カー ネルバージョンが一致することを確認 

rpm -q kernel-debuginfo

# crash /boot/System.map-2.6.9-34.21AX /usr/lib/debug/lib/modules/2.6.9-34.21AX/vmlinux (1行で)

06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


crashの起動メッセージ

06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


最初に覚えることは.... helpコマンド

詳細なヘルプは... crash> help [コマンド] 06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


Crashを一旦停止

06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


diskdumpを使ってvmcoreを作ってみる カーネルのsysrq機能を利用

diskdumpの取得開始→diskdump取得

06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


crashの起動(vmcore編)  

vmcoreファイルを指定してcrashを起動 vmcoreファイルは、/var/crashディレクトリに格納 される # crash /boot/System.map-2.6.9-34.21AX /usr/lib/debug/lib/modules/2.6.9-34.21AX/vmlinux /var/crash/[IPアドレス-取得時間]/vmcore (1行で)

06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


crashの起動メッセージ

06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


最初に行うコマンドは.... bt(Back Trace)

06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


関数呼び出しの概念 call命令による関数の呼び出し プロセスの カーネルスタック

関数A return 関数B

06/08/06

関数Bのスタック

call 関数B

関数Aへの リターンアドレス

関数A

関数Aのスタック

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


BackTraceとは  

カーネル停止箇所の実行パスを表示 CPUが複数ある場合には、停止原因となったプロ セスの稼動していたCPUの実行パスを表示 スタック内のリターンアドレス の格納されているアドレス 次の命令へジャンプした アドレス

実行パス

06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


次にpsコマンド(プロセスリスト表示)

06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


psコマンドの表示 ➔ ➔ ➔ ➔ ➔ ➔ ➔ ➔ ➔

06/08/06

PID : プロセスID PPID : 親プロセスID CPU : 稼動CPU TASK : task_struct構造体のアドレス ST : プロセスのステータス %MEM : メモリ使用量 VSZ : 仮想メモリ空間サイズ RSS : 物理メモリ空間使用サイズ COMM : コマンド名

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


•カーネルメッセージの確認(log/dmesg) PANIC時のOopsメッセージ PANICしたアドレス レジスタの値

スタックのデータ

06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


原因プロセスのバックトレース(bt -f)

怪しい??

ここから調査開始 06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


関数の逆アセンブル(dis)

ソースと比較 /usr/src/linux/2.6.9-34.21AX/drivers/char/sysrq.c

0番地に値0を代入 → 0番地アクセス違反(書き込み禁止領域) 06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


crashの活用いろいろ

いろいろなcrashのコマンドを試してみる

06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


プロセスのオープンファイル一覧(files)

file構造体

06/08/06

dentry構造体

inode構造体

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


構造体の定義(struct)

06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


構造体のデータ(struct [構造体名] [address]) file構造体のアドレス dentry構造体へのアドレス つまり... file構造体 f_dentry

06/08/06

dentry構造体

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


構造体の確認例

file_operations構造体のアドレスが0xc88f1fc0

06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


構造体の確認結果(symコマンドの利用) 関数名の表示 aio_write呼び出し時の 関数の実体は何?

symコマンドで確認

06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


モジュール一覧(mod) ext3_file_write()はなぜ表示されなかったのか...?

06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


モジュールのロード(mod -s) 書式: mod -s [モジュール名] [モジュールファイル]

もう一度確認

06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


file構造体のフラグ確認(evalの利用) f_flags = 33793(10進数) 16進数/8進数に直すと

06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


ファイルのモード確認 /usr/src/linux-2.6.9-34.21AX/include/asm-i386/fcntl.h

8進数: 102001    ↓ - O_WRONLY(01) - O_APPEND(02000) - O_LARGEFILE(0100000) の3つのフラグ設定

06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


ソケット情報の確認(net -s [PID] / net -n [数値]) sshdに接続されているソケットの情報を確認してみる

IPv6形式の表記: Source - IPv4のアドレスc0a80081 の 22番ポート Destination - IPv4のアドレスc0a80001の1486番ポート

IAサーバはリトルエンディアン - 192.168.0.129 - 192.168.0.1 06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


その他の普通のコマンド         

06/08/06

runq : 実行可能プロセスリスト sig : シグナル登録リスト timer: タイマー登録リスト swap: スワップ情報 kmem: メモリ関連情報 irq : 割り込み登録リスト dev: デバイス登録リスト mount: マウント情報 vm : プロセス仮想空間情報

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


エキスパートのためのコマンド1(search) 

search : ダンプ内を数値でサーチ

数値を見つけたアドレス

アドレスの並びに何かの 法則あり? 構造体?

06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


エキスパートのためのコマンド2(rd) 

rd : ダンプ内のメモリダンプ 書式: rd [アドレス] 表示サイズ

たぶん、File descriptor(fd)の配列を格納

06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


task_structからFD配列かどうか確認 include/linux/sched.h task_struct構造体

task_struct構造体のアドレス

crash> struct task_struct c51880f0

06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


files_structから調査

....

06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


Q&A

06/08/06

Copyright © 2000-2005 MIRACLE LINUX CORPORATION All rights reserved  


岡山カーネル勉強会crashによるカーネル内部探索  

岡山カーネル勉強会 crashによるカーネル内部探索 ミラクル・リナックス株式会社 コアテクノロジー部 武田 保真 2006/08/05  サーバ類のソフトはほとんど入っていません  crash探索用に以下をインストール  kernel-2.6.9-34.21AX(SP1)...

Read more
Read more
Similar to
Popular now
Just for you