[PATCH] D25946: [compiler-rt][asan] Add support for desallocation of unhandled pointers

Etienne Bergeron via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 14 08:51:03 PST 2017


etienneb added a comment.

For this given snippet:

  #include <windows.h>
  #include <iostream>
  
  int main(int argc, char* argv[]) {
    char *p1 = (char*)HeapAlloc(GetProcessHeap(), 0, 12);
    char *p2 = p1 + 7;
  
    BOOL b1 = HeapValidate(GetProcessHeap(), 0, NULL);
    BOOL b2 = HeapValidate(GetProcessHeap(), 0, p1);
    BOOL b3 = HeapValidate(GetProcessHeap(), 0, p2);
    std::cout << "result: " << b1 << " " << b2 << " " << b3 << std::endl;
  }

The result is:

  result: 1 1 0

HeapValidate is triggering a breakpoint with an invalid address:

  _RtlpBreakPointHeap at 4:
  77CA06F9  mov         edi,edi  
  77CA06FB  push        ebp  
  77CA06FC  mov         ebp,esp  
  77CA06FE  mov         eax,dword ptr fs:[00000018h]  
  77CA0704  mov         eax,dword ptr [eax+30h]  
  77CA0707  cmp         byte ptr [eax+2],0  
  77CA070B  je          _RtlpBreakPointHeap at 4+2Bh (77CA0724h)  
  77CA070D  mov         eax,dword ptr [ebp+8]  
  77CA0710  mov         byte ptr ds:[77CD92A5h],1  
  77CA0717  mov         dword ptr ds:[77CD92A0h],eax  
  77CA071C  int         3                                  <<---- debugger is breaking here
  77CA071D  mov         byte ptr ds:[77CD92A5h],0  
  77CA0724  pop         ebp  
  77CA0725  ret         4  


https://reviews.llvm.org/D25946





More information about the llvm-commits mailing list