From 68829b6853821a5882305841203757935e68e813 Mon Sep 17 00:00:00 2001 From: kuzeyardabulut <54737933+kuzeyardabulut@users.noreply.github.com> Date: Wed, 2 Aug 2023 19:41:06 +0300 Subject: [PATCH] Fix Potential Double Free Implementing mem::ManuallyDrop instead of mem::forget --- notify/src/windows.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/notify/src/windows.rs b/notify/src/windows.rs index d564ac3a..3771aa1b 100644 --- a/notify/src/windows.rs +++ b/notify/src/windows.rs @@ -301,10 +301,13 @@ fn start_read(rd: &ReadData, event_handler: Arc>, handle if ret == 0 { // error reading. retransmute request memory to allow drop. - // allow overlapped to drop by dropping ManuallyDrop + // allow overlapped to drop by omitting forget() let request: Box = mem::transmute(request_p); - std::mem::ManuallyDrop::drop(&mut overlapped); + ReleaseSemaphore(request.data.complete_sem, 1, ptr::null_mut()); + } else { + // read ok. forget overlapped to let the completion routine handle memory + std::mem::ManuallyDrop::drop(&mut overlapped); } } }