]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Config2Impl.c
MdeModulePkg: Update IP4 stack drivers for classless address unicast check.
[mirror_edk2.git] / MdeModulePkg / Universal / Network / Ip4Dxe / Ip4Config2Impl.c
index d868957896e6ec6e691cf3efc1ee392b63563814..a931bb3e77286fce85334fe0e9647263c0cdd50c 100644 (file)
@@ -737,8 +737,7 @@ Ip4Config2SetDnsServerWorker (
 \r
   for (NewIndex = 0; NewIndex < NewDnsCount; NewIndex++) {\r
     CopyMem (&DnsAddress, NewDns + NewIndex, sizeof (IP4_ADDR));\r
-\r
-    if (!NetIp4IsUnicast (NTOHL (DnsAddress), 0)) {\r
+    if (IP4_IS_UNSPECIFIED (NTOHL (DnsAddress)) || IP4_IS_LOCAL_BROADCAST (NTOHL (DnsAddress))) {\r
       //\r
       // The dns server address must be unicast.\r
       //\r
@@ -1347,14 +1346,15 @@ Ip4Config2SetGateway (
     return EFI_WRITE_PROTECTED;\r
   }\r
 \r
+  IpSb = IP4_SERVICE_FROM_IP4_CONFIG2_INSTANCE (Instance);\r
 \r
   NewGateway      = (EFI_IPv4_ADDRESS *) Data;\r
   NewGatewayCount = DataSize / sizeof (EFI_IPv4_ADDRESS);\r
   for (Index1 = 0; Index1 < NewGatewayCount; Index1++) {\r
     CopyMem (&Gateway, NewGateway + Index1, sizeof (IP4_ADDR));\r
-    \r
-    if (!NetIp4IsUnicast (NTOHL (Gateway), 0)) {\r
 \r
+    if ((IpSb->DefaultInterface->SubnetMask != 0) && \r
+        !NetIp4IsUnicast (NTOHL (Gateway), IpSb->DefaultInterface->SubnetMask)) {\r
       return EFI_INVALID_PARAMETER;\r
     }\r
 \r
@@ -1365,7 +1365,6 @@ Ip4Config2SetGateway (
     }\r
   }\r
  \r
-  IpSb = IP4_SERVICE_FROM_IP4_CONFIG2_INSTANCE (Instance);\r
   DataItem = &Instance->DataItem[Ip4Config2DataTypeGateway];\r
   OldGateway      = DataItem->Data.Gateway;\r
   OldGatewayCount = DataItem->DataSize / sizeof (EFI_IPv4_ADDRESS);\r