mirror of https://github.com/acidanthera/audk.git
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:
parent
69ebfa2b2b
commit
c167ef9131
|
@ -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
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -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 (
|
||||||
|
|
Loading…
Reference in New Issue