If a spinlock is scribbled on with 0x6b then it becomes "unlocked". I'd prefer that a scribbed-on lock be treated as locked, so things get stuck earlier. So make sure that all the slab poisoning values are negative. include/linux/sched.h | 2 +- mm/slab.c | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff -puN mm/slab.c~slab-scribble-negative mm/slab.c --- 25/mm/slab.c~slab-scribble-negative 2003-05-26 23:03:18.000000000 -0700 +++ 25-akpm/mm/slab.c 2003-05-26 23:08:27.000000000 -0700 @@ -344,8 +344,8 @@ struct kmem_cache_s { #define RED_ACTIVE 0x170FC2A5UL /* when obj is active */ /* ...and for poisoning */ -#define POISON_BEFORE 0x5a /* for use-uninitialised poisoning */ -#define POISON_AFTER 0x6b /* for use-after-free poisoning */ +#define POISON_BEFORE 0x8a /* for use-uninitialised poisoning */ +#define POISON_AFTER 0x9b /* for use-after-free poisoning */ #define POISON_END 0xa5 /* end-byte of poisoning */ #endif @@ -871,9 +871,9 @@ static void check_poison_obj(kmem_cache_ } printk(KERN_ERR "Data: "); for (s = 0; s < size; s++) { - if (((char*)addr)[s] == POISON_BEFORE) + if (((unsigned char*)addr)[s] == POISON_BEFORE) printk("."); - else if (((char*)addr)[s] == POISON_AFTER) + else if (((unsigned char*)addr)[s] == POISON_AFTER) printk("*"); else printk("%02X ", ((unsigned char*)addr)[s]); @@ -881,9 +881,9 @@ static void check_poison_obj(kmem_cache_ printk("\n"); printk(KERN_ERR "Next: "); for (; s < size + 32; s++) { - if (((char*)addr)[s] == POISON_BEFORE) + if (((unsigned char*)addr)[s] == POISON_BEFORE) printk("."); - else if (((char*)addr)[s] == POISON_AFTER) + else if (((unsigned char*)addr)[s] == POISON_AFTER) printk("*"); else printk("%02X ", ((unsigned char*)addr)[s]); diff -puN include/linux/sched.h~slab-scribble-negative include/linux/sched.h --- 25/include/linux/sched.h~slab-scribble-negative 2003-05-26 23:03:18.000000000 -0700 +++ 25-akpm/include/linux/sched.h 2003-05-26 23:07:47.000000000 -0700 @@ -463,7 +463,7 @@ extern void __put_task_struct(struct tas #define get_task_struct(tsk) do { atomic_inc(&(tsk)->usage); } while(0) #define put_task_struct(tsk) \ do { \ - BUG_ON((tsk)->debug == 0x6b6b6b6b); \ + BUG_ON((tsk)->debug == 0x9b9b9b9b); \ if (atomic_dec_and_test(&(tsk)->usage)) \ __put_task_struct(tsk); \ } while (0) _