[PATCH] ntdll: Fix race condition in RtlCreateHeap()

Bart Van Assche bvanassche at acm.org
Mon Feb 28 05:21:57 CST 2011


Other threads may access a heap as soon as it has been added to the
processHeap list. So the heap debug flags should be set before it has
been added to that list instead of after. This issue was detected by the
Valgrind DRD tool.

Signed-off-by: Bart Van Assche <bvanassche at acm.org>

---
 dlls/ntdll/heap.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/dlls/ntdll/heap.c b/dlls/ntdll/heap.c
index df94410..2e945e9 100644
--- a/dlls/ntdll/heap.c
+++ b/dlls/ntdll/heap.c
@@ -1538,6 +1538,8 @@ HANDLE WINAPI RtlCreateHeap( ULONG flags, PVOID
addr, SIZE_T totalSize, SIZE_T c

     if (!(subheap = HEAP_CreateSubHeap( NULL, addr, flags,
commitSize, totalSize ))) return 0;

+    heap_set_debug_flags( subheap->heap );
+
     /* link it into the per-process heap list */
     if (processHeap)
     {
@@ -1552,7 +1554,6 @@ HANDLE WINAPI RtlCreateHeap( ULONG flags, PVOID
addr, SIZE_T totalSize, SIZE_T c
         list_init( &processHeap->entry );
     }

-    heap_set_debug_flags( subheap->heap );
     return subheap->heap;
 }

-- 
1.7.1



More information about the wine-patches mailing list