From 3bae10b2bcdfca26f6d316247c74ca06168b730a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Fri, 19 Aug 2016 22:15:53 +0000 Subject: [PATCH] =?UTF-8?q?[SERVICES]=20=20-=20Properly=20invalidate=20ser?= =?UTF-8?q?vice=20handles=20when=20closing/freeing=20them=20Dedicated=20to?= =?UTF-8?q?=20Herm=C3=A8s=20and=20any=20regression=20chaser.=20FalsePositi?= =?UTF-8?q?ves--?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit svn path=/trunk/; revision=72396 --- reactos/base/system/services/rpcserver.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/reactos/base/system/services/rpcserver.c b/reactos/base/system/services/rpcserver.c index 7a773bec0ea..965a12230cc 100644 --- a/reactos/base/system/services/rpcserver.c +++ b/reactos/base/system/services/rpcserver.c @@ -21,6 +21,7 @@ #define MANAGER_TAG 0x72674D68 /* 'hMgr' */ #define SERVICE_TAG 0x63765368 /* 'hSvc' */ +#define INVALID_TAG 0xAABBCCDD typedef struct _SCMGR_HANDLE { @@ -952,7 +953,8 @@ DWORD RCloseServiceHandle( { DPRINT("Found manager handle\n"); - /* FIXME: add handle cleanup code */ + /* Make sure we don't access stale memory if someone tries to use this handle again. */ + hManager->Handle.Tag = INVALID_TAG; HeapFree(GetProcessHeap(), 0, hManager); hManager = NULL; @@ -972,7 +974,8 @@ DWORD RCloseServiceHandle( /* Get the pointer to the service record */ lpService = hService->ServiceEntry; - /* FIXME: add handle cleanup code */ + /* Make sure we don't access stale memory if someone tries to use this handle again. */ + hService->Handle.Tag = INVALID_TAG; /* Free the handle */ HeapFree(GetProcessHeap(), 0, hService);