summaryrefslogtreecommitdiff
path: root/NetworkPkg/WifiConnectionManagerDxe
diff options
context:
space:
mode:
authorWang, Fan <fan.wang@intel.com>2019-02-28 17:10:09 +0800
committerJiaxin Wu <Jiaxin.wu@intel.com>2019-03-01 10:38:51 +0800
commita6c63ee6d5d842bb8c4663c5140ae2c8e7360cac (patch)
tree9bf091fb7c11d91959cfb13cdddf137031e44d88 /NetworkPkg/WifiConnectionManagerDxe
parent407f5a0571d186bbfa0ac2e46ce63f4701063b86 (diff)
downloadedk2-a6c63ee6d5d842bb8c4663c5140ae2c8e7360cac.zip
edk2-a6c63ee6d5d842bb8c4663c5140ae2c8e7360cac.tar.gz
edk2-a6c63ee6d5d842bb8c4663c5140ae2c8e7360cac.tar.bz2
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>
Diffstat (limited to 'NetworkPkg/WifiConnectionManagerDxe')
-rw-r--r--NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrDriver.c1
-rw-r--r--NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrFileUtil.c1
-rw-r--r--NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrHiiConfigAccess.c9
-rw-r--r--NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrImpl.c1
4 files changed, 11 insertions, 1 deletions
diff --git a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrDriver.c b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrDriver.c
index 1431cdc..63b0670 100644
--- a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrDriver.c
+++ b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrDriver.c
@@ -411,6 +411,7 @@ WifiMgrDxeDriverBindingStop (
//
// Close Event
//
+ gBS->SetTimer (Nic->TickTimer, TimerCancel, 0);
gBS->CloseEvent (Nic->TickTimer);
//
diff --git a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrFileUtil.c b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrFileUtil.c
index 6db1626..02248234 100644
--- a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrFileUtil.c
+++ b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrFileUtil.c
@@ -253,6 +253,7 @@ UpdatePage(
if (Private->FileContext->FileName != NULL) {
FreePool (Private->FileContext->FileName);
+ Private->FileContext->FileName = NULL;
}
Private->FileContext->FileName = FileName;
diff --git a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrHiiConfigAccess.c b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrHiiConfigAccess.c
index bfb6b6e..d0d55f4 100644
--- a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrHiiConfigAccess.c
+++ b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrHiiConfigAccess.c
@@ -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;
diff --git a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrImpl.c b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrImpl.c
index 52ce18d..9417440 100644
--- a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrImpl.c
+++ b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrImpl.c
@@ -212,7 +212,6 @@ WifiMgrOnScanFinished (
}
}
- FreePool (Result);
gBS->SignalEvent (Nic->Private->NetworkListRefreshEvent);
//