如題,編譯核心時把CONFIG_SLUB_STATS、 CONFIG_SLUB_DEBUG_ON開啟,記憶體塊使用時越界出現這個資訊,說明記憶體塊在使用時Redzone區被值被覆蓋。
系統中的記憶體塊如下:
# cat /sys/kernel/slab/kmalloc-
/sys/kernel/slab/kmalloc-1024/ /sys/kernel/slab/kmalloc-4096/
/sys/kernel/slab/kmalloc-128/ /sys/kernel/slab/kmalloc-512/
/sys/kernel/slab/kmalloc-192/ /sys/kernel/slab/kmalloc-64/
/sys/kernel/slab/kmalloc-2048/ /sys/kernel/slab/kmalloc-8192/
/sys/kernel/slab/kmalloc-256/ /sys/kernel/slab/kmalloc-96/
/sys/kernel/slab/kmalloc-32/
# cat /sys/kernel/slab/kmalloc-
可知kmalloc可分配的記憶體區塊大小從32---4096.
完整資訊如下:
=============================================================================
BUG kmalloc-128: Redzone overwritten
-----------------------------------------------------------------------------
INFO: 0xc54d4140-0xc54d4140. First byte 0x0 instead of 0xcc
INFO: Allocated in dev_write+0x28/0x100 age=0 cpu=0 pid=12974
INFO: Freed in load_elf_binary+0x1118/0x11f8 age=0 cpu=0 pid=12974
INFO: Slab 0xc05dfa80 objects=21 used=1 fp=0xc54d4000 flags=0x00c1
INFO: Object 0xc54d40c0 @offset=192 fp=0xc54d4000
Bytes b4 0xc54d40b0: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ
Object 0xc54d40c0: 77 6c 30 5f 73 73 69 64 00 31 31 31 31 31 31 31 abc_1234.1111111
Object 0xc54d40d0: 31 31 31 31 31 31 31 31 31 34 30 3a 31 36 3a 39 11111111140:16:9
Object 0xc54d40e0: 46 3a 45 39 3a 34 31 3a 32 32 2d 34 30 3a 31 36 F:E9:41:22-40:16
Object 0xc54d40f0: 3a 39 46 3a 45 39 3a 34 31 3a 32 33 2d 34 30 3a :9F:E9:41:23-40:
Object 0xc54d4100: 31 36 3a 39 46 3a 45 39 3a 34 31 3a 32 34 2d 34 16:9F:E9:41:24-4
Object 0xc54d4110: 30 3a 31 36 3a 39 46 3a 45 39 3a 34 31 3a 32 35 0:16:9F:E9:41:25
Object 0xc54d4120: 2d 34 30 3a 31 36 3a 39 46 3a 45 39 3a 34 31 3a -40:16:9F:E9:41:
Object 0xc54d4130: 32 36 2d 34 30 3a 31 36 3a 39 46 3a 44 39 3a 00 26-40:16:9F:D9:.
Redzone 0xc54d4140: 00 cc cc cc
Padding 0xc54d4168: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ
Padding 0xc54d4178: 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZ
當kmalloc申請記憶體大小剛好為slab提供的記憶體區塊的莫一個大小時,比如128,如果把第128+1位置零,
就會出現上面的資訊。這隻是在記憶體區塊臨界時才能發現,但是影響遠比臨界可怕。
至此,問題已經很明了了。記憶體越界,你懂的!