私は、ファイルシステムの破損をデバッグしています(時々私はシンボリックリンクをマウントした後、「」指し参照)、私がしようとする(EXPERT
、KALLSYMS
、DEBUG_KERNEL
、DEBUG_VM
、DEBUG_SLAB
、DEBUG_LIST
、DEBUG_MUTEXES
、CC_STACKPROTECTOR
、など)menuconfigの中のCONFIGの通常の有効いくつかの情報を取得する。これは3.18安定したカーネル上にあります。デバッグカーネルでカーネルスラブ破損レポートの情報を取得するにはどうすればよいですか?
関連見えるrootfsのを装着するとき、私は時々、このようなレポートを参照してください。私は、コードが割り当てられたか(キャッシュに戻さ)のメモリを解放し、または何かを見つけようとしている
Slab corruption (Tainted: P W O): kmalloc-32 start=ac526c20, len=32
000: 00 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b .kkkkkkkkkkkkkkk
Prev obj: start=ac526c00, len=32
000: 00 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a .ZZZZZZZZZZZZZZZ
010: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a a5 ZZZZZZZZZZZZZZZ.
Next obj: start=ac526c40, len=32
000: 00 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a .ZZZZZZZZZZZZZZZ
010: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a a5 ZZZZZZZZZZZZZZZ.
似たような。
私はDEBUG_PAGEALLOC
= yと= nでテストしましたが、dmesgの "最終ユーザー"情報(つまりkmallocのスタック)は表示されません。これはslab.c [1]によればメモリブロックヘッダーはSLAB_STORE_USER
フラグを持ちます。
私の質問は、壊れたレポートに表示するために、どのようにallocスタックを得ることができますか?
EDIT:slub.txt [2]に従って、これはSLUBでのみ可能です。
[1] http://elixir.free-electrons.com/linux/v3.18.80/source/mm/slab.c#L1735
[2] https://www.kernel.org/doc/Documentation/vm/slub.txt