use print_symbol() to decode the offender's program counter. mm/slab.c | 11 ++++++++--- 1 files changed, 8 insertions(+), 3 deletions(-) diff -puN mm/slab.c~slab-caller-tracking-symbolic mm/slab.c --- 25/mm/slab.c~slab-caller-tracking-symbolic 2003-03-07 11:54:37.000000000 -0800 +++ 25-akpm/mm/slab.c 2003-03-07 11:54:37.000000000 -0800 @@ -82,6 +82,7 @@ #include #include #include +#include #include /* @@ -801,11 +802,15 @@ static void check_poison_obj(kmem_cache_ printk(KERN_ERR "Slab corruption: start=%p, expend=%p, " "problemat=%p\n", addr, addr+size-1, end); if (cachep->flags & SLAB_STORE_USER) { + void *pc; + if (cachep->flags & SLAB_RED_ZONE) - printk(KERN_ERR "Last user: [<%p>]\n", *(void**)(addr+size+BYTES_PER_WORD)); + pc = *(void**)(addr+size+BYTES_PER_WORD); else - printk(KERN_ERR "Last user: [<%p>]\n", *(void**)(addr+size)); - + pc = *(void**)(addr+size); + printk(KERN_ERR "Last user: [<%p>]", pc); + print_symbol("(%s)", (unsigned long)pc); + printk("\n"); } printk(KERN_ERR "Data: "); for (s = 0; s < size; s++) { _