Yes this is checking if the users entered password had a terminator on the end, if it doesn't we are adding it. During dev and testing we found a failure case if this was not tested and fixed.
Thanks, Zack -----Original Message----- From: Luo, Heng <heng....@intel.com> Sent: Monday, September 26, 2022 12:37 AM To: devel@edk2.groups.io; Clark-williams, Zachary <zachary.clark-willi...@intel.com> Cc: Zachary Clark-Williams <zclarkw...@gmail.com>; Maciej Rabeda <maciej.rab...@linux.intel.com> Subject: RE: [edk2-devel] [PATCH] NetworkPkg: Add WiFi profile sync protocol support Hi Zachary, > @@ -420,22 +422,34 @@ WifiMgrConfigPassword ( > // > // Set password to supplicant > // > + if (Profile->Password[StrLen (Profile->Password)] != '\0') { > + Profile->Password[StrLen (Profile->Password)] = L'\0'; } > + I don't understand this change, StrLen returns the length of a Null-terminated Unicode string, it means "Profile->Password[StrLen (Profile->Password)]" should always be 0. Did you see exceptional case? Thanks, Heng > -----Original Message----- > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Clark- > williams, Zachary > Sent: Thursday, September 15, 2022 3:43 AM > To: devel@edk2.groups.io > Cc: Zachary Clark-Williams <zclarkw...@gmail.com>; Clark-williams, > Zachary <zachary.clark-willi...@intel.com> > Subject: [edk2-devel] [PATCH] NetworkPkg: Add WiFi profile sync > protocol support > > From: Zachary Clark-Williams <zclarkw...@gmail.com> > > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3845 > > Enables KVM and One Click Recovery WLAN capability with WiFi Profile > Sync feature and protocol. Adding WiFiProfileSyncProtocol, which > supports the profilesync driver operations for transferring WiFi > profiles from AMT to the Supplicant. WiFiConnectionManager will check > for the WifiProfileSyncProtocol and if found will operate on the > premise of a One Click Recovery, or KVM flow with a Wifi profile provided by > AMT. > > Signed-off-by: Zachary Clark-Williams > <zachary.clark-willi...@intel.com> > --- > .../Protocol/WiFiProfileSyncProtocol.h | 83 ++++++++ > NetworkPkg/NetworkPkg.dec | 3 + > .../WifiConnectionManagerDxe.inf | 3 +- > .../WifiConnectionMgrDriver.c | 126 +++++++---- > .../WifiConnectionMgrDxe.h | 4 +- > .../WifiConnectionMgrImpl.c | 197 ++++++++++++++++-- > .../WifiConnectionMgrMisc.c | 13 ++ > 7 files changed, 370 insertions(+), 59 deletions(-) create mode > 100644 NetworkPkg/Include/Protocol/WiFiProfileSyncProtocol.h > > diff --git a/NetworkPkg/Include/Protocol/WiFiProfileSyncProtocol.h > b/NetworkPkg/Include/Protocol/WiFiProfileSyncProtocol.h > new file mode 100644 > index 0000000000..e36daceabf > --- /dev/null > +++ b/NetworkPkg/Include/Protocol/WiFiProfileSyncProtocol.h > @@ -0,0 +1,83 @@ > +/** @file > + WiFi profile sync protocol. Supports One Click Recovery or KVM OS > +recovery > + boot flow over WiFi. > + > + Copyright (c) 2022, Intel Corporation. All rights reserved.<BR> > + > + SPDX-License-Identifier: BSD-2-Clause-Patent **/ > + > +#ifndef WIFI_PROFILE_SYNC_PROTOCOL_H_ #define > +WIFI_PROFILE_SYNC_PROTOCOL_H_ > + > +#include <WifiConnectionManagerDxe/WifiConnectionMgrConfig.h> > + > +// > +// WiFi Profile Sync Protocol GUID variable. > +// > +extern EFI_GUID gEfiWiFiProfileSyncProtocolGuid; > + > +/** > + Used by the WiFi connection manager to get the WiFi profile that > +AMT shared > + and was stored in WiFi profile protocol. Aligns the AMT WiFi > +profile data to > + the WiFi connection manager profile structure fo connection use. > + > + @param[in, out] WcmProfile WiFi Connection Manager profile > structure > + @param[in, out] MacAddress MAC address from AMT saved to NiC > MAC address > + > + @retval EFI_SUCCESS Stored WiFi profile converted and > returned > succefully > + @retval EFI_UNSUPPORTED Profile protocol sharing not supported or > enabled > + @retval EFI_NOT_FOUND No profiles to returned > + @retval Others Error Occurred > +**/ > +typedef > +EFI_STATUS > +(EFIAPI *WIFI_PROFILE_GET)( > + IN OUT WIFI_MGR_NETWORK_PROFILE *Profile, > + IN OUT EFI_80211_MAC_ADDRESS MacAddress > + ); > + > +/** > + Saves the WiFi connection status recieved by the > +WiFiConnectionManager when > + in a KVM OR One Click Recovery WLAN recovery flow. Input as > + EFI_80211_CONNECT_NETWORK_RESULT_CODE then converted and > stored as EFI_STATUS type. > + > + @param[in] ConnectionStatus WiFi connection attempt results > +**/ > +typedef > +VOID > +(EFIAPI *WIFI_SET_CONNECT_STATE)( > + IN EFI_80211_CONNECT_NETWORK_RESULT_CODE ConnectionStatus > + ); > + > +/** > + Retrieves the stored WiFi connection status when in either KVM OR > +One Click > + Recovery WLAN recovery flow. > + > + @retval EFI_SUCCESS WiFi connection completed succesfully > + @retval Others Connection failure occurred > +**/ > +typedef > +EFI_STATUS > +(EFIAPI *WIFI_GET_CONNECT_STATE)( > + VOID > + ); > + > +// > +// WiFi Profile Sync Protocol structure. > +// > +typedef struct { > + UINT32 Revision; > + WIFI_SET_CONNECT_STATE WifiProfileSyncSetConnectState; > + WIFI_GET_CONNECT_STATE WifiProfileSyncGetConnectState; > + WIFI_PROFILE_GET WifiProfileSyncGetProfile; > +} EFI_WIFI_PROFILE_SYNC_PROTOCOL; > + > +/** > + WiFi Profile Protocol revision number. > + > + Revision 1: Initial version > +**/ > +#define EFI_WIFI_PROFILE_SYNC_PROTOCOL_REVISION 1 > + > +#endif // WIFI_PROFILE_SYNC_PROTOCOL_H_ > diff --git a/NetworkPkg/NetworkPkg.dec b/NetworkPkg/NetworkPkg.dec > index 5e43ebf8c5..53fb34c4a0 100644 > --- a/NetworkPkg/NetworkPkg.dec > +++ b/NetworkPkg/NetworkPkg.dec > @@ -91,6 +91,9 @@ > ## Include/Protocol/HttpCallback.h > gEdkiiHttpCallbackProtocolGuid = {0x611114f1, 0xa37b, 0x4468, > {0xa4, 0x36, 0x5b, 0xdd, 0xa1, 0x6a, 0xa2, 0x40}} > > + ## Include/Protocol/WiFiProfileSyncProtocol.h > + gEfiWiFiProfileSyncProtocolGuid = {0x399a2b8a, 0xc267, 0x44aa, > + {0x9a, 0xb4, 0x30, 0x58, 0x8c, 0xd2, 0x2d, 0xcc}} > + > [PcdsFixedAtBuild] > ## The max attempt number will be created by iSCSI driver. > # @Prompt Max attempt number. > diff --git > a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionManagerDxe.inf > b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionManagerDxe.inf > index 4394b6f4bb..7e36016cf8 100644 > --- > a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionManagerDxe.inf > +++ > b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionManagerDxe.inf > @@ -9,7 +9,7 @@ > # 2). WPA2 Personal Network > # 3). EAP Networks (EAP-TLS, EAP-TTLS/MSCHAPv2 and PEAPv0/MSCHAPv2) > # -# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR> > +# Copyright (c) 2019 - 2022, Intel Corporation. All rights > +reserved.<BR> > # > # SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -71,6 +71,7 @@ > gEfiAdapterInformationProtocolGuid ## SOMETIMES_CONSUMES > gEfiSupplicantProtocolGuid ## SOMETIMES_CONSUMES > gEfiEapConfigurationProtocolGuid ## SOMETIMES_CONSUMES > + gEfiWiFiProfileSyncProtocolGuid ## SOMETIMES_CONSUMES > > [Guids] > gWifiConfigGuid ## PRODUCES ## GUID > diff --git > a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrDriver.c > b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrDriver.c > index 67a01ca058..65df5b2c8a 100644 > --- a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrDriver.c > +++ b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrDriver.c > @@ -1,7 +1,7 @@ > /** @file > The driver binding protocol for the WiFi Connection Manager. > > - Copyright (c) 2019, Intel Corporation. All rights reserved.<BR> > + Copyright (c) 2019 - 2022, Intel Corporation. All rights > + reserved.<BR> > > SPDX-License-Identifier: BSD-2-Clause-Patent > > @@ -39,6 +39,11 @@ EFI_GUID mWifiConfigNetworkListRefreshGuid = > WIFI_CONFIG_NETWORK_LIST_REFRESH_G > EFI_GUID mWifiConfigConnectFormRefreshGuid = > WIFI_CONFIG_CONNECT_FORM_REFRESH_GUID; > EFI_GUID mWifiConfigMainFormRefreshGuid = > WIFI_CONFIG_MAIN_FORM_REFRESH_GUID; > > +// > +// Wifi connection attempt counter for retries // extern UINT8 > +WifiConnectionCount; > + > /** > Tests to see if this driver supports a given controller. If a child > device is provided, > it further tests to see if this driver supports creating a handle > for the specified child device. > @@ -167,8 +172,10 @@ WifiMgrDxeDriverBindingStart ( > EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL *Wmp; > EFI_SUPPLICANT_PROTOCOL *Supplicant; > EFI_EAP_CONFIGURATION_PROTOCOL *EapConfig; > + EFI_WIFI_PROFILE_SYNC_PROTOCOL *WiFiProfileSyncProtocol; > > - Nic = NULL; > + WifiConnectionCount = 0; > + Nic = NULL; > > // > // Open Protocols > @@ -236,47 +243,73 @@ WifiMgrDxeDriverBindingStart ( > InitializeListHead (&Nic->ProfileList); > > // > - // Record the MAC address of the incoming NIC. > + // WiFi profile sync protocol installation check for OS recovery flow. > // > - Status = NetLibGetMacAddress ( > - ControllerHandle, > - (EFI_MAC_ADDRESS *)&Nic->MacAddress, > - &AddressSize > - ); > - if (EFI_ERROR (Status)) { > - goto ERROR2; > - } > - > - // > - // Create and start the timer for the status check > - // > - Status = gBS->CreateEvent ( > - EVT_NOTIFY_SIGNAL | EVT_TIMER, > - TPL_CALLBACK, > - WifiMgrOnTimerTick, > - Nic, > - &Nic->TickTimer > + Status = gBS->LocateProtocol ( > + &gEfiWiFiProfileSyncProtocolGuid, > + NULL, > + (VOID **)&WiFiProfileSyncProtocol > ); > - if (EFI_ERROR (Status)) { > - goto ERROR2; > - } > + if (!EFI_ERROR (Status)) { > + Nic->ConnectPendingNetwork = (WIFI_MGR_NETWORK_PROFILE > *)AllocateZeroPool (sizeof (WIFI_MGR_NETWORK_PROFILE)); > + if (Nic->ConnectPendingNetwork == NULL) { > + Status = EFI_OUT_OF_RESOURCES; > + goto ERROR1; > + } > > - Status = gBS->SetTimer (Nic->TickTimer, TimerPeriodic, > EFI_TIMER_PERIOD_MILLISECONDS (500)); > - if (EFI_ERROR (Status)) { > - goto ERROR3; > - } > + WiFiProfileSyncProtocol->WifiProfileSyncGetProfile (Nic- > >ConnectPendingNetwork, Nic->MacAddress); > + if (Nic->ConnectPendingNetwork != NULL) { > + Status = WifiMgrConnectToNetwork (Nic, Nic->ConnectPendingNetwork); > + if (EFI_ERROR (Status)) { > + WiFiProfileSyncProtocol->WifiProfileSyncSetConnectState (Status); > + } > + } else { > + goto ERROR1; > + } > + } else { > + // > + // Record the MAC address of the incoming NIC. > + // > + Status = NetLibGetMacAddress ( > + ControllerHandle, > + (EFI_MAC_ADDRESS *)&Nic->MacAddress, > + &AddressSize > + ); > + if (EFI_ERROR (Status)) { > + goto ERROR2; > + } > > - Nic->ConnectState = WifiMgrDisconnected; > - Nic->ScanState = WifiMgrScanFinished; > + // > + // Create and start the timer for the status check > + // > + Status = gBS->CreateEvent ( > + EVT_NOTIFY_SIGNAL | EVT_TIMER, > + TPL_CALLBACK, > + WifiMgrOnTimerTick, > + Nic, > + &Nic->TickTimer > + ); > + if (EFI_ERROR (Status)) { > + goto ERROR2; > + } > > - OldTpl = gBS->RaiseTPL (TPL_CALLBACK); > - InsertTailList (&mPrivate->NicList, &Nic->Link); > - Nic->NicIndex = mPrivate->NicCount++; > - if (mPrivate->CurrentNic == NULL) { > - mPrivate->CurrentNic = Nic; > - } > + Status = gBS->SetTimer (Nic->TickTimer, TimerPeriodic, > EFI_TIMER_PERIOD_MILLISECONDS (500)); > + if (EFI_ERROR (Status)) { > + goto ERROR3; > + } > > - gBS->RestoreTPL (OldTpl); > + Nic->ConnectState = WifiMgrDisconnected; > + Nic->ScanState = WifiMgrScanFinished; > + > + OldTpl = gBS->RaiseTPL (TPL_CALLBACK); > + InsertTailList (&mPrivate->NicList, &Nic->Link); > + Nic->NicIndex = mPrivate->NicCount++; > + if (mPrivate->CurrentNic == NULL) { > + mPrivate->CurrentNic = Nic; > + } > + > + gBS->RestoreTPL (OldTpl); > + } > > Status = gBS->InstallProtocolInterface ( > &ControllerHandle, > @@ -385,10 +418,11 @@ WifiMgrDxeDriverBindingStop ( > IN EFI_HANDLE *ChildHandleBuffer OPTIONAL > ) > { > - EFI_STATUS Status; > - EFI_TPL OldTpl; > - WIFI_MGR_PRIVATE_PROTOCOL *WifiMgrIdentifier; > - WIFI_MGR_DEVICE_DATA *Nic; > + EFI_STATUS Status; > + EFI_TPL OldTpl; > + WIFI_MGR_PRIVATE_PROTOCOL *WifiMgrIdentifier; > + WIFI_MGR_DEVICE_DATA *Nic; > + EFI_WIFI_PROFILE_SYNC_PROTOCOL *WiFiProfileSyncProtocol; > > Status = gBS->OpenProtocol ( > ControllerHandle, > @@ -481,7 +515,15 @@ WifiMgrDxeDriverBindingStop ( > // > OldTpl = gBS->RaiseTPL (TPL_CALLBACK); > > - RemoveEntryList (&Nic->Link); > + Status = gBS->LocateProtocol ( > + &gEfiWiFiProfileSyncProtocolGuid, > + NULL, > + (VOID **)&WiFiProfileSyncProtocol > + ); > + if (EFI_ERROR (Status)) { > + RemoveEntryList (&Nic->Link); > + } > + > mPrivate->NicCount--; > if (mPrivate->CurrentNic == Nic) { > mPrivate->CurrentNic = NULL; > diff --git > a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrDxe.h > b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrDxe.h > index 7b2e41e155..047f85dbc2 100644 > --- a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrDxe.h > +++ b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrDxe.h > @@ -47,6 +47,7 @@ > #include <Protocol/SimpleNetwork.h> > #include <Protocol/SimpleFileSystem.h> #include > <Protocol/EapConfiguration.h> > +#include <Protocol/WiFiProfileSyncProtocol.h> > > // > // Produced Protocols > @@ -73,7 +74,8 @@ > // > #define WIFI_MGR_DXE_VERSION 0xb > > -#define OUI_IEEE_80211I 0xAC0F00 > +#define OUI_IEEE_80211I 0xAC0F00 > +#define MAX_WIFI_CONNETION_ATTEMPTS 3 > > typedef enum { > Ieee80211PairwiseCipherSuiteUseGroupCipherSuite = 0, diff --git > a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrImpl.c > b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrImpl.c > index 59bac48c42..3a04b4ddb1 100644 > --- a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrImpl.c > +++ b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrImpl.c > @@ -19,6 +19,8 @@ EFI_EAP_TYPE mEapSecondAuthMethod[] = { > EFI_EAP_TYPE_MSCHAPV2 > }; > > +UINT8 WifiConnectionCount = 0; > + > /** > The callback function for scan operation. This function updates networks > according to the latest scan result, and trigger UI refresh. > @@ -420,22 +422,34 @@ WifiMgrConfigPassword ( > // > // Set password to supplicant > // > + if (Profile->Password[StrLen (Profile->Password)] != '\0') { > + Profile->Password[StrLen (Profile->Password)] = L'\0'; } > + > if (StrLen (Profile->Password) < PASSWORD_MIN_LEN) { > return EFI_NOT_FOUND; > } > > - AsciiPassword = AllocateZeroPool ((StrLen (Profile->Password) + 1) > * sizeof (UINT8)); > + if (StrLen (Profile->Password) > PASSWORD_STORAGE_SIZE) { > + ASSERT (EFI_INVALID_PARAMETER); > + return EFI_INVALID_PARAMETER; > + } > + > + AsciiPassword = AllocateZeroPool ((StrLen (Profile->Password) + 1) > + * sizeof (CHAR8)); > if (AsciiPassword == NULL) { > return EFI_OUT_OF_RESOURCES; > } > > - UnicodeStrToAsciiStrS (Profile->Password, (CHAR8 *)AsciiPassword, > PASSWORD_STORAGE_SIZE); > - Status = Supplicant->SetData ( > - Supplicant, > - EfiSupplicant80211PskPassword, > - AsciiPassword, > - (StrLen (Profile->Password) + 1) * sizeof (UINT8) > - ); > + Status = UnicodeStrToAsciiStrS (Profile->Password, (CHAR8 > + *)AsciiPassword, ((StrLen (Profile->Password) + 1) * sizeof > + (CHAR8))); if > (!EFI_ERROR (Status)) { > + Status = Supplicant->SetData ( > + Supplicant, > + EfiSupplicant80211PskPassword, > + AsciiPassword, > + (StrLen (Profile->Password) + 1) * sizeof (CHAR8) > + ); > + } > + > ZeroMem (AsciiPassword, AsciiStrLen ((CHAR8 *)AsciiPassword) + 1); > FreePool (AsciiPassword); > > @@ -466,6 +480,7 @@ WifiMgrConfigEap ( > ) > { > EFI_STATUS Status; > + EFI_WIFI_PROFILE_SYNC_PROTOCOL *WiFiProfileSyncProtocol; > EFI_EAP_CONFIGURATION_PROTOCOL *EapConfig; > EFI_EAP_TYPE EapAuthMethod; > EFI_EAP_TYPE EapSecondAuthMethod; > @@ -567,7 +582,13 @@ WifiMgrConfigEap ( > return EFI_OUT_OF_RESOURCES; > } > > - UnicodeStrToAsciiStrS (Profile->EapIdentity, Identity, IdentitySize); > + Status = gBS->LocateProtocol (&gEfiWiFiProfileSyncProtocolGuid, > + NULL, > (VOID **)&WiFiProfileSyncProtocol); > + if (!EFI_ERROR (Status)) { > + CopyMem (Identity, &Profile->EapIdentity, IdentitySize); > + } else { > + UnicodeStrToAsciiStrS (Profile->EapIdentity, Identity, IdentitySize); > + } > + > Status = EapConfig->SetData ( > EapConfig, > EFI_EAP_TYPE_IDENTITY, @@ -892,6 +913,133 > @@ WifiMgrPrepareConnection ( > return EFI_SUCCESS; > } > > +/** > + Will reset NiC data, get profile from profile sync driver, and send > +for > + another connection attempt.This function should not be called more > +than > + 3 times. > + > + @param[in] WiFiProfileSyncProtocol The target network profile to > connect. > + > + @retval EFI_SUCCESS The operation is completed. > + @retval other Operation failure. > + > +**/ > +EFI_STATUS > +ConnectionRetry ( > + IN EFI_WIFI_PROFILE_SYNC_PROTOCOL *WiFiProfileSyncProtocol > + ) > +{ > + EFI_STATUS Status; > + WIFI_MGR_DEVICE_DATA *Nic; > + EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL *Wmp; > + EFI_SUPPLICANT_PROTOCOL *Supplicant; > + EFI_EAP_CONFIGURATION_PROTOCOL *EapConfig; > + > + Nic = NULL; > + > + Status = gBS->LocateProtocol ( > + &gEfiWiFi2ProtocolGuid, > + NULL, > + (VOID **)&Wmp > + ); > + if (EFI_ERROR (Status)) { > + return Status; > + } > + > + Status = gBS->LocateProtocol ( > + &gEfiSupplicantProtocolGuid, > + NULL, > + (VOID **)&Supplicant > + ); > + if (EFI_ERROR (Status)) { > + Supplicant = NULL; > + } > + > + Status = gBS->LocateProtocol ( > + &gEfiEapConfigurationProtocolGuid, > + NULL, > + (VOID **)&EapConfig > + ); > + if (EFI_ERROR (Status)) { > + EapConfig = NULL; > + } > + > + // > + // Initialize Nic device data > + // > + Nic = AllocateZeroPool (sizeof (WIFI_MGR_DEVICE_DATA)); if (Nic == > + NULL) { > + Status = EFI_OUT_OF_RESOURCES; > + return Status; > + } > + > + Nic->Signature = WIFI_MGR_DEVICE_DATA_SIGNATURE; > + Nic->Private = mPrivate; > + Nic->Wmp = Wmp; > + Nic->Supplicant = Supplicant; > + Nic->EapConfig = EapConfig; > + Nic->UserSelectedProfile = NULL; > + Nic->OneTimeScanRequest = FALSE; > + > + if (Nic->Supplicant != NULL) { > + Status = WifiMgrGetSupportedSuites (Nic); } > + > + if (!EFI_ERROR (Status)) { > + InitializeListHead (&Nic->ProfileList); > + > + Nic->ConnectPendingNetwork = (WIFI_MGR_NETWORK_PROFILE > *)AllocateZeroPool (sizeof (WIFI_MGR_NETWORK_PROFILE)); > + if (Nic->ConnectPendingNetwork == NULL) { > + Status = EFI_OUT_OF_RESOURCES; > + DEBUG ((DEBUG_ERROR, "[WiFi Connection Manager] Failed to > + allocate > memory for ConnectPendingNetwork\n")); > + goto ERROR; > + } > + > + Status = WiFiProfileSyncProtocol->WifiProfileSyncGetProfile (Nic- > >ConnectPendingNetwork, Nic->MacAddress); > + if (!EFI_ERROR (Status) && (Nic->ConnectPendingNetwork != NULL)) { > + Status = WifiMgrConnectToNetwork (Nic, Nic->ConnectPendingNetwork); > + if (!EFI_ERROR (Status)) { > + return Status; > + } > + } else { > + DEBUG ((DEBUG_ERROR, "[WiFi Connection Manager] Failed to get > + WiFi > profile with status %r\n", Status)); > + } > + } else { > + DEBUG ((DEBUG_ERROR, "[WiFi Connection Manager] Failed to get > + Supported suites with status %r\n", Status)); } > + > + if (Nic->ConnectPendingNetwork != NULL) { > + if (Nic->ConnectPendingNetwork->Network.AKMSuite != NULL) { > + FreePool (Nic->ConnectPendingNetwork->Network.AKMSuite); > + } > + > + if (Nic->ConnectPendingNetwork->Network.CipherSuite != NULL) { > + FreePool (Nic->ConnectPendingNetwork->Network.CipherSuite); > + } > + > + FreePool (Nic->ConnectPendingNetwork); } > + > +ERROR: > + if (Nic->Supplicant != NULL) { > + if (Nic->SupportedSuites.SupportedAKMSuites != NULL) { > + FreePool (Nic->SupportedSuites.SupportedAKMSuites); > + } > + > + if (Nic->SupportedSuites.SupportedSwCipherSuites != NULL) { > + FreePool (Nic->SupportedSuites.SupportedSwCipherSuites); > + } > + > + if (Nic->SupportedSuites.SupportedHwCipherSuites != NULL) { > + FreePool (Nic->SupportedSuites.SupportedHwCipherSuites); > + } > + } > + > + FreePool (Nic); > + > + return Status; > +} > + > /** > The callback function for connect operation. > > @@ -908,12 +1056,13 @@ WifiMgrOnConnectFinished ( > IN VOID *Context > ) > { > - EFI_STATUS Status; > - WIFI_MGR_MAC_CONFIG_TOKEN *ConfigToken; > - WIFI_MGR_NETWORK_PROFILE *ConnectedProfile; > - UINT8 SecurityType; > - UINT8 SSIdLen; > - CHAR8 *AsciiSSId; > + EFI_STATUS Status; > + WIFI_MGR_MAC_CONFIG_TOKEN *ConfigToken; > + WIFI_MGR_NETWORK_PROFILE *ConnectedProfile; > + UINT8 SecurityType; > + UINT8 SSIdLen; > + CHAR8 *AsciiSSId; > + EFI_WIFI_PROFILE_SYNC_PROTOCOL *WiFiProfileSyncProtocol; > > ASSERT (Context != NULL); > > @@ -925,6 +1074,24 @@ WifiMgrOnConnectFinished ( > ASSERT (ConfigToken->Type == TokenTypeConnectNetworkToken); > > ASSERT (ConfigToken->Token.ConnectNetworkToken != NULL); > + > + Status = gBS->LocateProtocol (&gEfiWiFiProfileSyncProtocolGuid, > + NULL, (VOID **)&WiFiProfileSyncProtocol); if (!EFI_ERROR (Status)) { > + WiFiProfileSyncProtocol->WifiProfileSyncSetConnectState > + (ConfigToken- > >Token.ConnectNetworkToken->ResultCode); > + if ((WifiConnectionCount < MAX_WIFI_CONNETION_ATTEMPTS) && > + (ConfigToken->Token.ConnectNetworkToken->ResultCode != > ConnectSuccess)) > + { > + WifiConnectionCount++; > + gBS->CloseEvent (Event); > + Status = ConnectionRetry (WiFiProfileSyncProtocol); > + if (!EFI_ERROR (Status)) { > + return; > + } > + > + WiFiProfileSyncProtocol->WifiProfileSyncSetConnectState (Status); > + } > + } > + > if (ConfigToken->Token.ConnectNetworkToken->Status != EFI_SUCCESS) { > if (ConfigToken->Nic->OneTimeConnectRequest) { > // > diff --git > a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrMisc.c > b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrMisc.c > index 4ad5643c24..87adfc5033 100644 > --- a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrMisc.c > +++ b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrMisc.c > @@ -672,10 +672,23 @@ WifiMgrCleanProfileSecrets ( > IN WIFI_MGR_NETWORK_PROFILE *Profile > ) > { > + EFI_STATUS Status; > + EFI_WIFI_PROFILE_SYNC_PROTOCOL *WiFiProfileSyncProtocol; > + > ZeroMem (Profile->Password, sizeof (CHAR16) * > PASSWORD_STORAGE_SIZE); > ZeroMem (Profile->EapPassword, sizeof (CHAR16) * > PASSWORD_STORAGE_SIZE); > ZeroMem (Profile->PrivateKeyPassword, sizeof (CHAR16) * > PASSWORD_STORAGE_SIZE); > > + // > + // When EFI WiFi profile sync protocol is found the system is > + performing a recovery boot in secure // boot mode. The profile > + sync driver will manage the CA certificate, client certificate, and > + key // data, > cleaning them at exit boot services. > + // > + Status = gBS->LocateProtocol (&gEfiWiFiProfileSyncProtocolGuid, > + NULL, (VOID **)&WiFiProfileSyncProtocol); if (!EFI_ERROR (Status)) { > + return; > + } > + > if (Profile->CACertData != NULL) { > ZeroMem (Profile->CACertData, Profile->CACertSize); > FreePool (Profile->CACertData); > -- > 2.26.2.windows.1 > > > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#94343): https://edk2.groups.io/g/devel/message/94343 Mute This Topic: https://groups.io/mt/93685737/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-