PXE driver bug fix.

1. Update the parameter check of PXE.UdpRead() to align with spec definition.
2. Update PXE driver to use EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_IP when calling UdpRead to receive server discovery message. 

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Fu Siyuan <siyuan.fu@intel.com>
Reviewed-by: Ye Ting <ting.ye@intel.com>
Reviewed-by: Wu Jiaxin <jiaxin.wu@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17075 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Fu Siyuan 2015-03-26 04:49:30 +00:00 committed by sfu5
parent 1044ef6be5
commit 903d1fa991
2 changed files with 10 additions and 12 deletions

View File

@ -2,7 +2,7 @@
Functions implementation related with DHCPv6 for UefiPxeBc Driver. Functions implementation related with DHCPv6 for UefiPxeBc Driver.
(C) Copyright 2014 Hewlett-Packard Development Company, L.P.<BR> (C) Copyright 2014 Hewlett-Packard Development Company, L.P.<BR>
Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR> Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
@ -793,8 +793,8 @@ PxeBcRequestBootService (
Status = PxeBc->UdpRead ( Status = PxeBc->UdpRead (
PxeBc, PxeBc,
EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_IP, EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_IP | EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_IP,
&Private->StationIp, NULL,
&SrcPort, &SrcPort,
&Private->ServerIp, &Private->ServerIp,
&DestPort, &DestPort,
@ -1807,7 +1807,6 @@ PxeBcDhcp6Discover (
UINT8 *RequestOpt; UINT8 *RequestOpt;
UINT8 *DiscoverOpt; UINT8 *DiscoverOpt;
UINTN ReadSize; UINTN ReadSize;
UINT16 OpFlags;
UINT16 OpCode; UINT16 OpCode;
UINT16 OpLen; UINT16 OpLen;
UINT32 Xid; UINT32 Xid;
@ -1818,7 +1817,6 @@ PxeBcDhcp6Discover (
Request = Private->Dhcp6Request; Request = Private->Dhcp6Request;
SrcPort = PXEBC_BS_DISCOVER_PORT; SrcPort = PXEBC_BS_DISCOVER_PORT;
DestPort = PXEBC_BS_DISCOVER_PORT; DestPort = PXEBC_BS_DISCOVER_PORT;
OpFlags = 0;
if (!UseBis && Layer != NULL) { if (!UseBis && Layer != NULL) {
*Layer &= EFI_PXE_BASE_CODE_BOOT_LAYER_MASK; *Layer &= EFI_PXE_BASE_CODE_BOOT_LAYER_MASK;
@ -1862,7 +1860,7 @@ PxeBcDhcp6Discover (
Status = PxeBc->UdpWrite ( Status = PxeBc->UdpWrite (
PxeBc, PxeBc,
OpFlags, 0,
&Private->ServerIp, &Private->ServerIp,
&DestPort, &DestPort,
NULL, NULL,
@ -1899,8 +1897,8 @@ PxeBcDhcp6Discover (
Status = PxeBc->UdpRead ( Status = PxeBc->UdpRead (
PxeBc, PxeBc,
OpFlags, EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_IP,
&Private->StationIp, NULL,
&SrcPort, &SrcPort,
&Private->ServerIp, &Private->ServerIp,
&DestPort, &DestPort,

View File

@ -1265,7 +1265,7 @@ EfiPxeBcUdpRead (
UINTN FragmentIndex; UINTN FragmentIndex;
UINT8 *FragmentBuffer; UINT8 *FragmentBuffer;
if (This == NULL || DestIp == NULL || DestPort == NULL) { if (This == NULL) {
return EFI_INVALID_PARAMETER; return EFI_INVALID_PARAMETER;
} }
@ -1276,9 +1276,9 @@ EfiPxeBcUdpRead (
Udp4Rx = NULL; Udp4Rx = NULL;
Udp6Rx = NULL; Udp6Rx = NULL;
if (((OpFlags & EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_PORT) != 0 && DestPort == NULL) || if (((OpFlags & EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_PORT) == 0 && DestPort == NULL) ||
((OpFlags & EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_IP) != 0 && SrcIp == NULL) || ((OpFlags & EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_IP) == 0 && SrcIp == NULL) ||
((OpFlags & EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_PORT) != 0 && SrcPort == NULL)) { ((OpFlags & EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_PORT) == 0 && SrcPort == NULL)) {
return EFI_INVALID_PARAMETER; return EFI_INVALID_PARAMETER;
} }