Hi there!
Currently the valgrind-message for use-after-free for a memory pool
consists of the execution callstack and the callstack, where the
superblock was allocated. To better diagnose it I wanted to get also the
callstack of the place where MEMPOOL_FREE was called.
The attached patch uses the new fields added for use-after-free messages
that show two callstacks.
It is just a proof of concept.
How could it be improved?
Regards
Matthias
--- a/memcheck/mc_errors.c
+++ b/memcheck/mc_errors.c
@@ -346,7 +346,15 @@ static void mc_pp_AddrInfo ( Addr a, AddrInfo* ai, Bool maybe_gcc )
);
if (ai->Addr.Block.block_kind==Block_Mallocd) {
VG_(pp_ExeContext)(ai->Addr.Block.allocated_at);
- tl_assert (ai->Addr.Block.freed_at == VG_(null_ExeContext)());
+ if (ai->Addr.Block.freed_at != VG_(null_ExeContext)()) {
+ emit(
+ "%s block was re-alloced at%s\n",
+ xpre,
+ xpost
+ );
+ VG_(pp_ExeContext)(ai->Addr.Block.freed_at);
+ }
+ //tl_assert (ai->Addr.Block.freed_at == VG_(null_ExeContext)());
}
else if (ai->Addr.Block.block_kind==Block_Freed) {
VG_(pp_ExeContext)(ai->Addr.Block.freed_at);
@@ -1183,6 +1191,7 @@ static Bool mempool_block_maybe_describe( Addr a, AddrInfo* ai );
static void describe_addr ( Addr a, /*OUT*/AddrInfo* ai )
{
MC_Chunk* mc;
+ MC_Chunk* mc_freed;
ThreadId tid;
Addr stack_min, stack_max;
VgSectKind sect;
@@ -1211,7 +1220,8 @@ static void describe_addr ( Addr a, /*OUT*/AddrInfo* ai )
if (addr_is_in_MC_Chunk_default_REDZONE_SZB(mc, a)) {
ai->tag = Addr_Block;
ai->Addr.Block.block_kind = Block_Mallocd;
- if (MC_(get_freed_block_bracketting)( a ))
+ mc_freed = MC_(get_freed_block_bracketting)( a );
+ if (mc_freed)
ai->Addr.Block.block_desc = "recently re-allocated block";
else
ai->Addr.Block.block_desc = "block";
@@ -1219,6 +1229,10 @@ static void describe_addr ( Addr a, /*OUT*/AddrInfo* ai )
ai->Addr.Block.rwoffset = (Word)a - (Word)mc->data;
ai->Addr.Block.allocated_at = MC_(allocated_at)(mc);
ai->Addr.Block.freed_at = MC_(freed_at)(mc);
+ if (mc_freed && ai->Addr.Block.freed_at == VG_(null_ExeContext)())
+ {
+ ai->Addr.Block.freed_at = MC_(freed_at)(mc_freed);
+ }
return;
}
}
------------------------------------------------------------------------------
Free Next-Gen Firewall Hardware Offer
Buy your Sophos next-gen firewall before the end March 2013
and get the hardware for free! Learn more.
http://p.sf.net/sfu/sophos-d2d-feb
_______________________________________________
Valgrind-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/valgrind-users