2017-12-15 19 views
0

私は、ファイルシステムの破損をデバッグしています(時々私はシンボリックリンクをマウントした後、「」指し参照)、私がしようとする(EXPERTKALLSYMSDEBUG_KERNELDEBUG_VMDEBUG_SLABDEBUG_LISTDEBUG_MUTEXESCC_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

答えて

0

自分の質問に答えます。 SLUBはバックトレースとredzone情報を提供します。私はSLUB,SLUB_DEBUG,CONFIG_SLUB_DEBUG_ONを有効にしました。

BUG kmalloc-32 (Tainted: P O): Redzone overwritten 
INFO: Allocated in custom_read+0x2c/0x9c age=1 cpu=1 pid=2856 
    custom_read+0x2c/0x9c 
    vfs_read+0x84/0xec 
    SyS_read+0x4c/0x9c 
    ret_fast_syscall+0x0/0x4c 
INFO: Freed in link_path_walk+0x594/0x770 age=1 cpu=1 pid=2856 
    path_lookupat+0x20/0x674 
    filename_lookup.isra.10+0x20/0x5c 
    user_path_at_empty+0x60/0x9c 
... 

これは、inode-> i_nameであった次のオブジェクトに\ 0を置くoff-by-oneでした。

関連する問題