diff --git a/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcImpl.c b/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcImpl.c index 6f6d7f92ae..511e064873 100644 --- a/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcImpl.c +++ b/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcImpl.c @@ -727,7 +727,7 @@ ON_EXIT: } } - Status = Private->Udp4Read->Configure (Private->Udp4Read, &Private->Udp4CfgData); + Private->Udp4Read->Configure (Private->Udp4Read, &Private->Udp4CfgData); // // Dhcp(), Discover(), and Mtftp() set the IP filter, and return with the IP @@ -1024,7 +1024,7 @@ EfiPxeBcDiscover ( } else { Status = EFI_DEVICE_ERROR; } - return Status; + goto ON_EXIT; } else { PxeBcParseCachedDhcpPacket (&Private->PxeReply); } @@ -1043,7 +1043,7 @@ EfiPxeBcDiscover ( ON_EXIT: - Status = Private->Udp4Read->Configure (Private->Udp4Read, &Private->Udp4CfgData); + Private->Udp4Read->Configure (Private->Udp4Read, &Private->Udp4CfgData); // // Dhcp(), Discover(), and Mtftp() set the IP filter, and return with the IP @@ -1280,10 +1280,11 @@ EfiPxeBcMtftp ( } if (EFI_ERROR (Status)) { - return Status; + goto ON_EXIT; } - Status = Private->Udp4Read->Configure (Private->Udp4Read, &Private->Udp4CfgData); +ON_EXIT: + Private->Udp4Read->Configure (Private->Udp4Read, &Private->Udp4CfgData); // // Dhcp(), Discover(), and Mtftp() set the IP filter, and return with the IP // receive filter list emptied and the filter set to EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP. diff --git a/NetworkPkg/UefiPxeBcDxe/PxeBcDhcp6.c b/NetworkPkg/UefiPxeBcDxe/PxeBcDhcp6.c index 3e59f3f233..8715675472 100644 --- a/NetworkPkg/UefiPxeBcDxe/PxeBcDhcp6.c +++ b/NetworkPkg/UefiPxeBcDxe/PxeBcDhcp6.c @@ -1626,6 +1626,14 @@ PxeBcDhcp6Discover ( } ReadSize = (UINTN) Reply->Size; + // + // Start Udp6Read instance + // + Status = Private->Udp6Read->Configure (Private->Udp6Read, &Private->Udp6CfgData); + if (EFI_ERROR (Status)) { + return Status; + } + Status = PxeBc->UdpRead ( PxeBc, OpFlags, @@ -1638,6 +1646,10 @@ PxeBcDhcp6Discover ( &ReadSize, (VOID *) &Reply->Dhcp6 ); + // + // Stop Udp6Read instance + // + Private->Udp6Read->Configure (Private->Udp6Read, NULL); if (EFI_ERROR (Status)) { return Status; } diff --git a/NetworkPkg/UefiPxeBcDxe/PxeBcImpl.c b/NetworkPkg/UefiPxeBcDxe/PxeBcImpl.c index 00f1e4d395..67abd48f4c 100644 --- a/NetworkPkg/UefiPxeBcDxe/PxeBcImpl.c +++ b/NetworkPkg/UefiPxeBcDxe/PxeBcImpl.c @@ -430,13 +430,8 @@ EfiPxeBcDhcp ( Status = PxeBcDhcp6Sarr (Private, Private->Dhcp6); if (EFI_ERROR (Status)) { - return Status; + goto ON_EXIT; } - - // - // Configure Udp6Read instance - // - Status = Private->Udp6Read->Configure (Private->Udp6Read, &Private->Udp6CfgData); } else { // @@ -450,15 +445,16 @@ EfiPxeBcDhcp ( Status = PxeBcDhcp4Dora (Private, Private->Dhcp4); if (EFI_ERROR (Status)) { - return Status; + goto ON_EXIT; } - - // - // Configure Udp4Read instance - // - Status = Private->Udp4Read->Configure (Private->Udp4Read, &Private->Udp4CfgData); } - + +ON_EXIT: + if (Mode->UsingIpv6) { + Private->Udp6Read->Configure (Private->Udp6Read, &Private->Udp6CfgData); + } else { + Private->Udp4Read->Configure (Private->Udp4Read, &Private->Udp4CfgData); + } // // Dhcp(), Discover(), and Mtftp() set the IP filter, and return with the IP // receive filter list emptied and the filter set to EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP. @@ -692,7 +688,7 @@ EfiPxeBcDiscover ( } if (EFI_ERROR (Status)) { - return Status; + goto ON_EXIT; } else { // // Parse the cached PXE reply packet, and store it into mode data if valid. @@ -725,9 +721,9 @@ EfiPxeBcDiscover ( ON_EXIT: if (Mode->UsingIpv6) { - Status = Private->Udp6Read->Configure (Private->Udp6Read, &Private->Udp6CfgData); + Private->Udp6Read->Configure (Private->Udp6Read, &Private->Udp6CfgData); } else { - Status = Private->Udp4Read->Configure (Private->Udp4Read, &Private->Udp4CfgData); + Private->Udp4Read->Configure (Private->Udp4Read, &Private->Udp4CfgData); } // @@ -962,15 +958,15 @@ EfiPxeBcMtftp ( } if (EFI_ERROR (Status)) { - return Status; + goto ON_EXIT; } - + +ON_EXIT: if (Mode->UsingIpv6) { - Status = Private->Udp6Read->Configure (Private->Udp6Read, &Private->Udp6CfgData); + Private->Udp6Read->Configure (Private->Udp6Read, &Private->Udp6CfgData); } else { - Status = Private->Udp4Read->Configure (Private->Udp4Read, &Private->Udp4CfgData); + Private->Udp4Read->Configure (Private->Udp4Read, &Private->Udp4CfgData); } - // // Dhcp(), Discover(), and Mtftp() set the IP filter, and return with the IP // receive filter list emptied and the filter set to EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP.