2017-12-15 38 views
0

나는 파일 시스템 손상 (가끔 심볼릭 링크 마운트 후 ""가리키는 참조) 디버깅 그리고 난 menuconfig를 (EXPERT, KALLSYMS, DEBUG_KERNEL, DEBUG_VM, DEBUG_SLAB, DEBUG_LIST, DEBUG_MUTEXES, CC_STACKPROTECTOR 등) 시도에 일반적인 구성의 활성화 정보를 얻으려면. 이것은 3.18 - stable 커널에 있습니다. 디버그 커널커널 슬랩 손상 보고서에서 정보를 얻으려면 어떻게해야합니까?

관련 봐 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입니다.

제 질문은 어떻게 손상 보고서에 표시 할 할당 스택을 얻을 수 있습니까?

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을 추가하는 기능이 해제되었습니다.