EN JA
REDZONE(9)
REDZONE(9) FreeBSD Kernel Developer's Manual REDZONE(9)

名称

RedZoneバッファの間違い検出器

書式

options KDB
options DDB
options DEBUG_REDZONE

解説

RedZone は、実行時にバッファのアンダフローとバッファのオーバフローのバグを検出します。現在、 RedZone は、 malloc(9) で割り付けられたメモリのためのバッファ間違いのみを検出します。そのような間違いが検出されるとき、2 つのバックトレースがコンソールに印刷 (表示) されます。最初のものは、メモリが割り付けられたところから表示し、 2 番目のものは、メモリが解放されたところから表示します。バッファの間違いが検出されるとき、デフォルトで、システムは、パニックしません。 vm.redzone.panic sysctl(8) 変数に 1 をを設定することによって、これを変更することができます。 RedZone の必要性のために割り付けられた特別なメモリの量は、 vm.redzone.extra_mem sysctl(8) 変数に格納されます。

使用例

下記の例は、バッファのアンダフローとバッファのオーバフローを検出したログを表示しています。

REDZONE: Buffer underflow detected. 2 bytes corrupted before 0xc8688580 (16 bytes allocated). 
Allocation backtrace: 
#0 0xc0583e4e at redzone_setup+0x3c 
#1 0xc04a23fa at malloc+0x19e 
#2 0xcdeb69ca at redzone_modevent+0x60 
#3 0xc04a3f3c at module_register_init+0x82 
#4 0xc049d96a at linker_file_sysinit+0x8e 
#5 0xc049dc7c at linker_load_file+0xed 
#6 0xc04a041f at linker_load_module+0xc4 
#7 0xc049e883 at kldload+0x116 
#8 0xc05d9b3d at syscall+0x325 
#9 0xc05c944f at Xint0x80_syscall+0x1f 
Free backtrace: 
#0 0xc0583f92 at redzone_check+0xd4 
#1 0xc04a2422 at free+0x1c 
#2 0xcdeb69a6 at redzone_modevent+0x3c 
#3 0xc04a438d at module_unload+0x61 
#4 0xc049e0b3 at linker_file_unload+0x89 
#5 0xc049e979 at kern_kldunload+0x96 
#6 0xc049ea00 at kldunloadf+0x2c 
#7 0xc05d9b3d at syscall+0x325 
#8 0xc05c944f at Xint0x80_syscall+0x1f 
 
REDZONE: Buffer overflow detected. 4 bytes corrupted after 0xc8688590 (16 bytes allocated). 
Allocation backtrace: 
#0 0xc0583e4e at redzone_setup+0x3c 
#1 0xc04a23fa at malloc+0x19e 
#2 0xcdeb69ca at redzone_modevent+0x60 
#3 0xc04a3f3c at module_register_init+0x82 
#4 0xc049d96a at linker_file_sysinit+0x8e 
#5 0xc049dc7c at linker_load_file+0xed 
#6 0xc04a041f at linker_load_module+0xc4 
#7 0xc049e883 at kldload+0x116 
#8 0xc05d9b3d at syscall+0x325 
#9 0xc05c944f at Xint0x80_syscall+0x1f 
Free backtrace: 
#0 0xc0584020 at redzone_check+0x162 
#1 0xc04a2422 at free+0x1c 
#2 0xcdeb69a6 at redzone_modevent+0x3c 
#3 0xc04a438d at module_unload+0x61 
#4 0xc049e0b3 at linker_file_unload+0x89 
#5 0xc049e979 at kern_kldunload+0x96 
#6 0xc049ea00 at kldunloadf+0x2c 
#7 0xc05d9b3d at syscall+0x325 
#8 0xc05c944f at Xint0x80_syscall+0x1f

歴史

RedZone は、 FreeBSD 7.0 ではじめて登場しました。

作者

Pawel Jakub Dawidek <pjd@FreeBSD.org>

バグ

現在、 RedZone は、 memguard(9) と連係していません。 memguard(9) によって制御されたメモリタイプの割り付けは、単にスキップされるので、バッファの間違いは、そこで検出されません。
January 9, 2009 FreeBSD