From b7f28e1a6ce0eabbc04e87c39fc3b5a0a7b34a6c Mon Sep 17 00:00:00 2001 From: Fu Siyuan Date: Tue, 3 May 2016 13:29:23 +0800 Subject: NetworkPkg: Ignore BootFileName if it is overloaded. Make sure "File" field is not overloaded to carry other DHCP options before use it in HTTP boot driver. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Fu Siyuan Reviewed-by: Wu Jiaxin Reviewed-by: Ye Ting --- NetworkPkg/HttpBootDxe/HttpBootDhcp4.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'NetworkPkg/HttpBootDxe') diff --git a/NetworkPkg/HttpBootDxe/HttpBootDhcp4.c b/NetworkPkg/HttpBootDxe/HttpBootDhcp4.c index b9c8084e11..5a226d7f76 100644 --- a/NetworkPkg/HttpBootDxe/HttpBootDhcp4.c +++ b/NetworkPkg/HttpBootDxe/HttpBootDhcp4.c @@ -259,11 +259,13 @@ HttpBootParseDhcp4Packet ( EFI_STATUS Status; HTTP_BOOT_OFFER_TYPE OfferType; EFI_IPv4_ADDRESS IpAddr; + BOOLEAN FileFieldOverloaded; IsDnsOffer = FALSE; IpExpressedUri = FALSE; IsProxyOffer = FALSE; IsHttpOffer = FALSE; + FileFieldOverloaded = FALSE; ZeroMem (Cache4->OptList, sizeof (Cache4->OptList)); @@ -288,6 +290,7 @@ HttpBootParseDhcp4Packet ( Option = Options[HTTP_BOOT_DHCP4_TAG_INDEX_OVERLOAD]; if (Option != NULL) { if ((Option->Data[0] & HTTP_BOOT_DHCP4_OVERLOAD_FILE) != 0) { + FileFieldOverloaded = TRUE; for (Index = 0; Index < HTTP_BOOT_DHCP4_TAG_INDEX_MAX; Index++) { if (Options[Index] == NULL) { Options[Index] = HttpBootParseDhcp4Options ( @@ -351,7 +354,7 @@ HttpBootParseDhcp4Packet ( if (*(Ptr8 - 1) != '\0') { *Ptr8 = '\0'; } - } else if (Offer->Dhcp4.Header.BootFileName[0] != 0) { + } else if (!FileFieldOverloaded && Offer->Dhcp4.Header.BootFileName[0] != 0) { // // If the bootfile is not present and bootfilename is present in DHCPv4 packet, just parse it. // Do not count dhcp option header here, or else will destroy the serverhostname. -- cgit v1.2.3