MdeModulePkg/IpIoLib: add more error handling code to DxeIpIoLib.

In DxeIpIo, there are several places not check the returned value of called functions.
This patch is to add the error handling to these functions.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Fu Siyuan <siyuan.fu@intel.com>
Reviewed-by: Ye Ting <ting.ye@intel.com>
This commit is contained in:
Fu Siyuan 2017-12-13 15:06:16 +08:00
parent 69ebfa2b2b
commit c167ef9131
2 changed files with 58 additions and 37 deletions

View File

@ -428,7 +428,7 @@ IpIoSend (
IN IP_IO_IP_INFO *Sender OPTIONAL, IN IP_IO_IP_INFO *Sender OPTIONAL,
IN VOID *Context OPTIONAL, IN VOID *Context OPTIONAL,
IN VOID *NotifyData OPTIONAL, IN VOID *NotifyData OPTIONAL,
IN EFI_IP_ADDRESS *Dest, IN EFI_IP_ADDRESS *Dest OPTIONAL,
IN IP_IO_OVERRIDE *OverrideData OPTIONAL IN IP_IO_OVERRIDE *OverrideData OPTIONAL
); );

View File

@ -234,24 +234,25 @@ IpIoCloseProtocolDestroyIpChild (
// //
// Close the previously openned IP protocol. // Close the previously openned IP protocol.
// //
gBS->CloseProtocol ( Status = gBS->CloseProtocol (
ChildHandle, ChildHandle,
IpProtocolGuid, IpProtocolGuid,
ImageHandle, ImageHandle,
ControllerHandle ControllerHandle
); );
if (EFI_ERROR (Status)) {
return Status;
}
// //
// Destroy the IP child. // Destroy the IP child.
// //
Status = NetLibDestroyServiceChild ( return NetLibDestroyServiceChild (
ControllerHandle, ControllerHandle,
ImageHandle, ImageHandle,
ServiceBindingGuid, ServiceBindingGuid,
ChildHandle ChildHandle
); );
return Status;
} }
/** /**
@ -377,8 +378,14 @@ IpIoIcmpv4Handler (
TrimBytes = (UINT32) (PayLoadHdr - (UINT8 *) IcmpHdr); TrimBytes = (UINT32) (PayLoadHdr - (UINT8 *) IcmpHdr);
NetbufTrim (Pkt, TrimBytes, TRUE); NetbufTrim (Pkt, TrimBytes, TRUE);
IpIo->PktRcvdNotify (EFI_ICMP_ERROR, IcmpErr, Session, Pkt, IpIo->RcvdContext); //
// If the input packet has invalid format, and TrimBytes is larger than
// the packet size, the NetbufTrim might trim the packet to zero.
//
if (Pkt->TotalSize != 0) {
IpIo->PktRcvdNotify (EFI_ICMP_ERROR, IcmpErr, Session, Pkt, IpIo->RcvdContext);
}
return EFI_SUCCESS; return EFI_SUCCESS;
} }
@ -539,7 +546,13 @@ IpIoIcmpv6Handler (
NetbufTrim (Pkt, TrimBytes, TRUE); NetbufTrim (Pkt, TrimBytes, TRUE);
IpIo->PktRcvdNotify (EFI_ICMP_ERROR, IcmpErr, Session, Pkt, IpIo->RcvdContext); //
// If the input packet has invalid format, and TrimBytes is larger than
// the packet size, the NetbufTrim might trim the packet to zero.
//
if (Pkt->TotalSize != 0) {
IpIo->PktRcvdNotify (EFI_ICMP_ERROR, IcmpErr, Session, Pkt, IpIo->RcvdContext);
}
return EFI_SUCCESS; return EFI_SUCCESS;
} }
@ -1542,7 +1555,7 @@ IpIoSend (
IN IP_IO_IP_INFO *Sender OPTIONAL, IN IP_IO_IP_INFO *Sender OPTIONAL,
IN VOID *Context OPTIONAL, IN VOID *Context OPTIONAL,
IN VOID *NotifyData OPTIONAL, IN VOID *NotifyData OPTIONAL,
IN EFI_IP_ADDRESS *Dest, IN EFI_IP_ADDRESS *Dest OPTIONAL,
IN IP_IO_OVERRIDE *OverrideData OPTIONAL IN IP_IO_OVERRIDE *OverrideData OPTIONAL
) )
{ {
@ -1799,19 +1812,23 @@ IpIoConfigIp (
} }
if (IpConfigData != NULL) { if (IpConfigData != NULL) {
if (IpInfo->IpVersion == IP_VERSION_4){ if (IpInfo->IpVersion == IP_VERSION_4) {
if (((EFI_IP4_CONFIG_DATA *) IpConfigData)->UseDefaultAddress) { if (((EFI_IP4_CONFIG_DATA *) IpConfigData)->UseDefaultAddress) {
Ip.Ip4->GetModeData ( Status = Ip.Ip4->GetModeData (
Ip.Ip4, Ip.Ip4,
&Ip4ModeData, &Ip4ModeData,
NULL, NULL,
NULL NULL
); );
if (EFI_ERROR (Status)) {
Ip.Ip4->Configure (Ip.Ip4, NULL);
goto OnExit;
}
IP4_COPY_ADDRESS (&((EFI_IP4_CONFIG_DATA*) IpConfigData)->StationAddress, &Ip4ModeData.ConfigData.StationAddress); IP4_COPY_ADDRESS (&((EFI_IP4_CONFIG_DATA*) IpConfigData)->StationAddress, &Ip4ModeData.ConfigData.StationAddress);
IP4_COPY_ADDRESS (&((EFI_IP4_CONFIG_DATA*) IpConfigData)->SubnetMask, &Ip4ModeData.ConfigData.SubnetMask); IP4_COPY_ADDRESS (&((EFI_IP4_CONFIG_DATA*) IpConfigData)->SubnetMask, &Ip4ModeData.ConfigData.SubnetMask);
} }
CopyMem ( CopyMem (
&IpInfo->Addr.Addr, &IpInfo->Addr.Addr,
@ -1828,16 +1845,20 @@ IpIoConfigIp (
Ip.Ip4, Ip.Ip4,
&IpInfo->DummyRcvToken.Ip4Token &IpInfo->DummyRcvToken.Ip4Token
); );
if (EFI_ERROR (Status)) { if (EFI_ERROR (Status)) {
Ip.Ip4->Configure (Ip.Ip4, NULL); Ip.Ip4->Configure (Ip.Ip4, NULL);
} }
} else { } else {
Ip.Ip6->GetModeData ( Status = Ip.Ip6->GetModeData (
Ip.Ip6, Ip.Ip6,
&Ip6ModeData, &Ip6ModeData,
NULL, NULL,
NULL NULL
); );
if (EFI_ERROR (Status)) {
Ip.Ip6->Configure (Ip.Ip6, NULL);
goto OnExit;
}
if (Ip6ModeData.IsConfigured) { if (Ip6ModeData.IsConfigured) {
CopyMem ( CopyMem (