Instance->Signature = ARP_INSTANCE_DATA_SIGNATURE;\r
Instance->ArpService = ArpService;\r
\r
- CopyMem (&Instance->ArpProto, &mEfiArpProtocolTemplate, sizeof (ARP_SERVICE_DATA));\r
+ CopyMem (&Instance->ArpProto, &mEfiArpProtocolTemplate, sizeof (Instance->ArpProto));\r
\r
Instance->Configured = FALSE;\r
Instance->Destroyed = FALSE;\r
}\r
}\r
\r
- NetListRemoveEntry (&CacheEntry->List);\r
+ if (!IsListEmpty (&CacheEntry->List)) {\r
+ NetListRemoveEntry (&CacheEntry->List);\r
+ }\r
\r
//\r
// Fill the addresses into the CacheEntry.\r
//\r
// Save the configuration.\r
//\r
- CopyMem (OldConfigData, ConfigData, sizeof (EFI_ARP_CONFIG_DATA));\r
+ CopyMem (OldConfigData, ConfigData, sizeof (*OldConfigData));\r
\r
OldConfigData->StationAddress = NetAllocatePool (OldConfigData->SwAddressLength);\r
if (OldConfigData->StationAddress == NULL) {\r
\r
if (EntryLength != NULL) {\r
//\r
- // Return the entry length.\r
+ // Return the entry length, make sure its 8 bytes alignment.\r
//\r
- *EntryLength = sizeof (EFI_ARP_FIND_DATA) + Instance->ConfigData.SwAddressLength +\r
- ArpService->SnpMode.HwAddressSize;\r
+ *EntryLength = (((sizeof (EFI_ARP_FIND_DATA) + Instance->ConfigData.SwAddressLength +\r
+ ArpService->SnpMode.HwAddressSize) + 3) & ~(0x3));\r
}\r
\r
if (EntryCount != NULL) {\r