From d39e686aed3b0a8553bcdf099bf042835d64fc0d Mon Sep 17 00:00:00 2001 From: Michael Kubacki Date: Thu, 11 Dec 2025 17:59:18 -0500 Subject: [PATCH] NetworkPkg: Handle wait exit on poll failure `EfiDhcp4Start()` would spin forever if `DhcpSb->IoStatus` is not updated from `EFI_ALREADY_STARTED`. This change captures the poll status (instead of ignoring it) and break out on failures so scenarios like unplug/media-loss return an error instead of hanging. Signed-off-by: Michael Kubacki --- NetworkPkg/Dhcp4Dxe/Dhcp4Impl.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/NetworkPkg/Dhcp4Dxe/Dhcp4Impl.c b/NetworkPkg/Dhcp4Dxe/Dhcp4Impl.c index d9ab76cae39..ddf9a3645bf 100644 --- a/NetworkPkg/Dhcp4Dxe/Dhcp4Impl.c +++ b/NetworkPkg/Dhcp4Dxe/Dhcp4Impl.c @@ -824,7 +824,15 @@ EfiDhcp4Start ( if (CompletionEvent == NULL) { while (DhcpSb->IoStatus == EFI_ALREADY_STARTED) { - DhcpSb->UdpIo->Protocol.Udp4->Poll (DhcpSb->UdpIo->Protocol.Udp4); + // MU_CHANGE [BEGIN] - Add Udp4 Polling break support + Status = DhcpSb->UdpIo->Protocol.Udp4->Poll (DhcpSb->UdpIo->Protocol.Udp4); + if (EFI_ERROR (Status)) { + // Break out if the NIC goes away or poll fails so we don't spin forever. + DhcpSb->IoStatus = Status; + break; + } + + // MU_CHANGE [END] - Add Udp4 Polling break support } return DhcpSb->IoStatus;