From 524813f3ab556af64ddbe8fe5d30ef3328cb7324 Mon Sep 17 00:00:00 2001 From: "Fu, Siyuan" Date: Thu, 26 May 2016 09:04:06 +0800 Subject: [PATCH] MdeModulePkg: Stop the timer before clean IP service. In Ip4CleanService()it first cleaned some resources, then stop the timer . While before the timer stopped it may try to access some already freed data, which may generate an exception. This patch updates the driver to stop the timer event before starting to clean up the service data. Cc: Wu Jiaxin Cc: Ye Ting Cc: Subramanian Sriram Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Fu Siyuan Reviewed-by: Samer El-Haj-Mahmoud Reviewed-by: Sriram Subramanian Reviewed-by: Ye Ting Reviewed-by: Wu Jiaxin --- .../Universal/Network/Ip4Dxe/Ip4Driver.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Driver.c b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Driver.c index fb83784da9..fcd3ccb9fd 100644 --- a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Driver.c +++ b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Driver.c @@ -393,6 +393,15 @@ Ip4CleanService ( { EFI_STATUS Status; + IpSb->State = IP4_SERVICE_DESTROY; + + if (IpSb->Timer != NULL) { + gBS->SetTimer (IpSb->Timer, TimerCancel, 0); + gBS->CloseEvent (IpSb->Timer); + + IpSb->Timer = NULL; + } + if (IpSb->DefaultInterface != NULL) { Status = Ip4FreeInterface (IpSb->DefaultInterface, NULL); @@ -432,13 +441,6 @@ Ip4CleanService ( IpSb->MnpChildHandle = NULL; } - if (IpSb->Timer != NULL) { - gBS->SetTimer (IpSb->Timer, TimerCancel, 0); - gBS->CloseEvent (IpSb->Timer); - - IpSb->Timer = NULL; - } - if (IpSb->ReconfigEvent != NULL) { gBS->CloseEvent (IpSb->ReconfigEvent); @@ -750,8 +752,6 @@ Ip4DriverBindingStop ( } else if (IsListEmpty (&IpSb->Children)) { State = IpSb->State; - IpSb->State = IP4_SERVICE_DESTROY; - // // OK, clean other resources then uninstall the service binding protocol. // -- 2.39.2