NetworkPkg: Fix Duplicate FreePool Error in WCM

* REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1577

In WiFi Connection Manager scan process, the result received
from WiFi device driver will be freed twice, and will cause
unexpected errors, and even system crash.

This issue also exists in some other places potentially, this
patch is to fix these issues and also add Timer Cancelling
before Close to avoid potential NULL reference.

Cc: Ye Ting <ting.ye@intel.com>
Cc: Fu Siyuan <siyuan.fu@intel.com>
Cc: Wu Jiaxin <jiaxin.wu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Wang Fan <fan.wang@intel.com>
Reviewed-by: Fu Siyuan <siyuan.fu@intel.com>
Reviewed-by: Wu Jiaxin <jiaxin.wu@intel.com>
This commit is contained in:
Wang, Fan 2019-02-28 17:10:09 +08:00 committed by Jiaxin Wu
parent 407f5a0571
commit a6c63ee6d5
4 changed files with 11 additions and 1 deletions

View File

@ -411,6 +411,7 @@ WifiMgrDxeDriverBindingStop (
//
// Close Event
//
gBS->SetTimer (Nic->TickTimer, TimerCancel, 0);
gBS->CloseEvent (Nic->TickTimer);
//

View File

@ -253,6 +253,7 @@ UpdatePage(
if (Private->FileContext->FileName != NULL) {
FreePool (Private->FileContext->FileName);
Private->FileContext->FileName = NULL;
}
Private->FileContext->FileName = FileName;

View File

@ -447,6 +447,8 @@ WifiMgrRefreshNetworkList (
}
FreePool (AKMListDisplay);
FreePool (CipherListDisplay);
AKMListDisplay = NULL;
CipherListDisplay = NULL;
HiiCreateGotoOpCode (
StartOpCodeHandle,
@ -532,6 +534,8 @@ WifiMgrRefreshNetworkList (
}
FreePool (AKMListDisplay);
FreePool (CipherListDisplay);
AKMListDisplay = NULL;
CipherListDisplay = NULL;
HiiCreateGotoOpCode (
StartOpCodeHandle,
@ -612,6 +616,8 @@ WifiMgrRefreshNetworkList (
}
FreePool (AKMListDisplay);
FreePool (CipherListDisplay);
AKMListDisplay = NULL;
CipherListDisplay = NULL;
PortHelpToken = HiiSetString (Private->RegisteredHandle, 0, PortString, NULL);
@ -1657,6 +1663,7 @@ WifiMgrDxeHiiConfigAccessCallback (
ZeroMem (Profile->PrivateKeyData, Profile->PrivateKeyDataSize);
FreePool (Profile->PrivateKeyData);
Profile->PrivateKeyData = NULL;
}
Status = WifiMgrReadFileToBuffer (
@ -1700,12 +1707,14 @@ WifiMgrDxeHiiConfigAccessCallback (
ZeroMem (Profile->CACertData, Profile->CACertSize);
FreePool (Profile->CACertData);
Profile->CACertData = NULL;
}
} else if (Private->FileType == FileTypeClientCert) {
if (Profile->ClientCertData != NULL) {
ZeroMem (Profile->ClientCertData, Profile->ClientCertSize);
FreePool (Profile->ClientCertData);
Profile->ClientCertData = NULL;
}
} else {
break;

View File

@ -212,7 +212,6 @@ WifiMgrOnScanFinished (
}
}
FreePool (Result);
gBS->SignalEvent (Nic->Private->NetworkListRefreshEvent);
//