summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Universal/Network/Udp4Dxe
diff options
context:
space:
mode:
Diffstat (limited to 'MdeModulePkg/Universal/Network/Udp4Dxe')
-rw-r--r--MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Driver.c97
-rw-r--r--MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Impl.c18
-rw-r--r--MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Main.c2
3 files changed, 52 insertions, 65 deletions
diff --git a/MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Driver.c b/MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Driver.c
index 7e2bc451ae..7a7c184498 100644
--- a/MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Driver.c
+++ b/MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Driver.c
@@ -123,7 +123,8 @@ Udp4DriverBindingStart (
Status = Udp4CreateService (Udp4Service, This->DriverBindingHandle, ControllerHandle);
if (EFI_ERROR (Status)) {
- goto FREE_SERVICE;
+ NetFreePool (Udp4Service);
+ return Status;
}
//
@@ -136,21 +137,12 @@ Udp4DriverBindingStart (
NULL
);
if (EFI_ERROR (Status)) {
- goto CLEAN_SERVICE;
+ Udp4CleanService (Udp4Service);
+ NetFreePool (Udp4Service);
+ } else {
+ Udp4SetVariableData (Udp4Service);
}
- Udp4SetVariableData (Udp4Service);
-
- return Status;
-
-CLEAN_SERVICE:
-
- Udp4CleanService (Udp4Service);
-
-FREE_SERVICE:
-
- NetFreePool (Udp4Service);
-
return Status;
}
@@ -188,7 +180,7 @@ Udp4DriverBindingStop (
//
NicHandle = NetLibGetNicHandle (ControllerHandle, &gEfiIp4ProtocolGuid);
if (NicHandle == NULL) {
- return EFI_SUCCESS;
+ return EFI_DEVICE_ERROR;
}
//
@@ -208,35 +200,30 @@ Udp4DriverBindingStop (
Udp4Service = UDP4_SERVICE_DATA_FROM_THIS (ServiceBinding);
- //
- // Uninstall the UDP4 ServiceBinding Protocol.
- //
- Status = gBS->UninstallMultipleProtocolInterfaces (
- NicHandle,
- &gEfiUdp4ServiceBindingProtocolGuid,
- &Udp4Service->ServiceBinding,
- NULL
- );
- if (EFI_ERROR (Status)) {
- return EFI_DEVICE_ERROR;
- }
+ if (NumberOfChildren == 0) {
- while (!NetListIsEmpty (&Udp4Service->ChildrenList)) {
- //
- // Destroy all instances.
- //
- Instance = NET_LIST_HEAD (&Udp4Service->ChildrenList, UDP4_INSTANCE_DATA, Link);
+ gBS->UninstallMultipleProtocolInterfaces (
+ NicHandle,
+ &gEfiUdp4ServiceBindingProtocolGuid,
+ &Udp4Service->ServiceBinding,
+ NULL
+ );
- ServiceBinding->DestroyChild (ServiceBinding, Instance->ChildHandle);
- }
+ Udp4ClearVariableData (Udp4Service);
- Udp4ClearVariableData (Udp4Service);
+ Udp4CleanService (Udp4Service);
- Udp4CleanService (Udp4Service);
+ NetFreePool (Udp4Service);
+ } else {
- NetFreePool (Udp4Service);
+ while (!NetListIsEmpty (&Udp4Service->ChildrenList)) {
+ Instance = NET_LIST_HEAD (&Udp4Service->ChildrenList, UDP4_INSTANCE_DATA, Link);
- return EFI_SUCCESS;
+ ServiceBinding->DestroyChild (ServiceBinding, Instance->ChildHandle);
+ }
+ }
+
+ return Status;
}
@@ -277,7 +264,7 @@ Udp4ServiceBindingCreateChild (
//
// Allocate the instance private data structure.
//
- Instance = NetAllocatePool (sizeof (UDP4_INSTANCE_DATA));
+ Instance = NetAllocateZeroPool (sizeof (UDP4_INSTANCE_DATA));
if (Instance == NULL) {
return EFI_OUT_OF_RESOURCES;
}
@@ -290,7 +277,7 @@ Udp4ServiceBindingCreateChild (
Instance->IpInfo = IpIoAddIp (Udp4Service->IpIo);
if (Instance->IpInfo == NULL) {
Status = EFI_OUT_OF_RESOURCES;
- goto FREE_INSTANCE;
+ goto ON_ERROR;
}
//
@@ -303,7 +290,7 @@ Udp4ServiceBindingCreateChild (
NULL
);
if (EFI_ERROR (Status)) {
- goto REMOVE_IPINFO;
+ goto ON_ERROR;
}
Instance->ChildHandle = *ChildHandle;
@@ -320,7 +307,7 @@ Udp4ServiceBindingCreateChild (
EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
);
if (EFI_ERROR (Status)) {
- goto UNINSTALL_PROTOCOL;
+ goto ON_ERROR;
}
OldTpl = NET_RAISE_TPL (NET_TPL_LOCK);
@@ -333,22 +320,22 @@ Udp4ServiceBindingCreateChild (
NET_RESTORE_TPL (OldTpl);
- return Status;
-
-UNINSTALL_PROTOCOL:
-
- gBS->UninstallMultipleProtocolInterfaces (
- Instance->ChildHandle,
- &gEfiUdp4ProtocolGuid,
- &Instance->Udp4Proto,
- NULL
- );
+ return EFI_SUCCESS;
-REMOVE_IPINFO:
+ON_ERROR:
- IpIoRemoveIp (Udp4Service->IpIo, Instance->IpInfo);
+ if (Instance->ChildHandle != NULL) {
+ gBS->UninstallMultipleProtocolInterfaces (
+ Instance->ChildHandle,
+ &gEfiUdp4ProtocolGuid,
+ &Instance->Udp4Proto,
+ NULL
+ );
+ }
-FREE_INSTANCE:
+ if (Instance->IpInfo != NULL) {
+ IpIoRemoveIp (Udp4Service->IpIo, Instance->IpInfo);
+ }
Udp4CleanInstance (Instance);
diff --git a/MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Impl.c b/MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Impl.c
index 9cbd29511f..39924cfa7a 100644
--- a/MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Impl.c
+++ b/MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Impl.c
@@ -153,6 +153,8 @@ Udp4CreateService (
EFI_STATUS Status;
IP_IO_OPEN_DATA OpenData;
+ NetZeroMem (Udp4Service, sizeof (UDP4_SERVICE_DATA));
+
Udp4Service->Signature = UDP4_SERVICE_DATA_SIGNATURE;
Udp4Service->ServiceBinding = mUdp4ServiceBinding;
Udp4Service->ImageHandle = ImageHandle;
@@ -184,7 +186,7 @@ Udp4CreateService (
//
Status = IpIoOpen (Udp4Service->IpIo, &OpenData);
if (EFI_ERROR (Status)) {
- goto RELEASE_IPIO;
+ goto ON_ERROR;
}
//
@@ -198,7 +200,7 @@ Udp4CreateService (
&Udp4Service->TimeoutEvent
);
if (EFI_ERROR (Status)) {
- goto RELEASE_IPIO;
+ goto ON_ERROR;
}
//
@@ -210,18 +212,16 @@ Udp4CreateService (
UDP4_TIMEOUT_INTERVAL
);
if (EFI_ERROR (Status)) {
- goto RELEASE_ALL;
+ goto ON_ERROR;
}
- Udp4Service->MacString = NULL;
-
return EFI_SUCCESS;
-RELEASE_ALL:
-
- gBS->CloseEvent (Udp4Service->TimeoutEvent);
+ON_ERROR:
-RELEASE_IPIO:
+ if (Udp4Service->TimeoutEvent != NULL) {
+ gBS->CloseEvent (Udp4Service->TimeoutEvent);
+ }
IpIoDestroy (Udp4Service->IpIo);
diff --git a/MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Main.c b/MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Main.c
index 93a5cee35b..9d3b20a8a6 100644
--- a/MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Main.c
+++ b/MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Main.c
@@ -291,7 +291,7 @@ Udp4Configure (
//
Udp4FlushRcvdDgram (Instance);
-////bugbug ASSERT (NetListIsEmpty (&Instance->DeliveredDgramQue));
+ ASSERT (NetListIsEmpty (&Instance->DeliveredDgramQue));
}
Udp4SetVariableData (Instance->Udp4Service);