前言
一、slub_debug是什么?
说明:在linux内核中,小块内存分配使用slab/slub分配器,slab/slub分配器提供内存检测功能。主要检测如下功能:
访问已经释放的内存
越界访问
释放已经释放过的内存
二、检测越界访问 out-of-bounds
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/slab.h>
static char*buf;
static void create_slub_error(void)
{
buf = kmalloc(128,GFP_KERNEL);
if(buf){
memset(buf,0x55,200); //
}
}
static int __init my_test_init(void)
{
printk("figo:my module init\n");
create_slub_error();
return 0;
}
static void __exit my_test_exit(void)
{
printk("goodbyte\n");
kfree(buf);
}
module_init(my_test_init);
module_exit(my_test_exit);
MODULE_LICENSE("GPL");
##
aarch64-linux-gnu-gcc slabinfo.c slabinfo
echo 1 > /sys/kernel/slab/kmalloc-128/validate
insmod slub.ko
/slabinfo -v
/mnt # ./slabinfo -v
=============================================================================
BUG kmalloc-128 (Tainted: P O ): Redzone overwritten
--------------------------------------------