NetworkPkg: Fix DNS GeneralLookUp failure in some case
authorJiaxin Wu <jiaxin.wu@intel.com>
Mon, 6 Jun 2016 05:30:22 +0000 (13:30 +0800)
committerJiaxin Wu <jiaxin.wu@intel.com>
Mon, 13 Jun 2016 05:26:31 +0000 (13:26 +0800)
QClass value may be not equal to 1(DNS_CLASS_INET) when
GeneralLookUp query is called. So, remove QClass value check.
Moreover, the 'Identification' and 'Type' filed in Query packet
should not be changed to little endian since the packet maybe
retransmitted while there is any error happened.

Cc: Ye Ting <ting.ye@intel.com>
Cc: Zhang Lubo <lubo.zhang@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jiaxin Wu <jiaxin.wu@intel.com>
Reviewed-by: Ye Ting <ting.ye@intel.com>
Reviewed-by: Zhang Lubo <lubo.zhang@intel.com>
NetworkPkg/DnsDxe/DnsImpl.c
NetworkPkg/DnsDxe/DnsImpl.h

index 4f10e17cf30ffca63646b355da0857c599dc176b..360f68e1a4941a73b6db36cb59b255d416b0bcc9 100644 (file)
@@ -1043,6 +1043,7 @@ AddDns6ServerIp (
   @param  TokensMap       All DNS transmittal Tokens entry.  \r
   @param  Identification  Identification for queried packet.  \r
   @param  Type            Type for queried packet.\r
+  @param  Class           Class for queried packet.\r
   @param  Item            Return corresponding Token entry.\r
 \r
   @retval TRUE            The response is valid.\r
@@ -1054,6 +1055,7 @@ IsValidDnsResponse (
   IN     NET_MAP      *TokensMap,\r
   IN     UINT16       Identification,\r
   IN     UINT16       Type,\r
+  IN     UINT16       Class,\r
      OUT NET_MAP_ITEM **Item\r
   )\r
 {\r
@@ -1077,17 +1079,16 @@ IsValidDnsResponse (
       DnsHeader = (DNS_HEADER *) TxString;\r
       QueryName = (CHAR8 *) (TxString + sizeof (*DnsHeader));\r
       QuerySection = (DNS_QUERY_SECTION *) (QueryName + AsciiStrLen (QueryName) + 1);\r
-\r
-      DnsHeader->Identification = NTOHS (DnsHeader->Identification);\r
-      QuerySection->Type = NTOHS (QuerySection->Type);\r
         \r
-      if (DnsHeader->Identification == Identification && QuerySection->Type == Type) {\r
+      if (NTOHS (DnsHeader->Identification) == Identification &&\r
+          NTOHS (QuerySection->Type) == Type && \r
+          NTOHS (QuerySection->Class) == Class) {\r
         return TRUE;\r
       }\r
     } \r
   }\r
   \r
-  *Item =NULL;\r
+  *Item = NULL;\r
   \r
   return FALSE;\r
 }\r
@@ -1195,7 +1196,13 @@ ParseDnsResponse (
   // Check DnsResponse Validity, if so, also get a valid NET_MAP_ITEM.\r
   //\r
   if (Instance->Service->IpVersion == IP_VERSION_4) {\r
-    if (!IsValidDnsResponse (&Instance->Dns4TxTokens, DnsHeader->Identification, QuerySection->Type, &Item)) {\r
+    if (!IsValidDnsResponse (\r
+           &Instance->Dns4TxTokens, \r
+           DnsHeader->Identification, \r
+           QuerySection->Type,\r
+           QuerySection->Class,\r
+           &Item\r
+           )) {\r
       *Completed = FALSE;\r
       Status = EFI_ABORTED;\r
       goto ON_EXIT;\r
@@ -1203,7 +1210,13 @@ ParseDnsResponse (
     ASSERT (Item != NULL);\r
     Dns4TokenEntry = (DNS4_TOKEN_ENTRY *) (Item->Key);\r
   } else {\r
-    if (!IsValidDnsResponse (&Instance->Dns6TxTokens, DnsHeader->Identification, QuerySection->Type, &Item)) {\r
+    if (!IsValidDnsResponse (\r
+           &Instance->Dns6TxTokens, \r
+           DnsHeader->Identification, \r
+           QuerySection->Type,\r
+           QuerySection->Class,\r
+           &Item\r
+           )) {\r
       *Completed = FALSE;\r
       Status = EFI_ABORTED;\r
       goto ON_EXIT;\r
@@ -1216,7 +1229,7 @@ ParseDnsResponse (
   // Continue Check Some Errors.\r
   //\r
   if (DnsHeader->Flags.Bits.RCode != DNS_FLAGS_RCODE_NO_ERROR || DnsHeader->AnswersNum < 1 || \\r
-      DnsHeader->Flags.Bits.QR != DNS_FLAGS_QR_RESPONSE || QuerySection->Class != DNS_CLASS_INET) {\r
+      DnsHeader->Flags.Bits.QR != DNS_FLAGS_QR_RESPONSE) {\r
       Status = EFI_ABORTED;\r
       goto ON_EXIT;\r
   }\r
index 0ef8255e05bb717546262b0a66d491698c968f60..5fa7f244c257001301cc019f85120badab9012fd 100644 (file)
@@ -561,6 +561,7 @@ AddDns6ServerIp (
   @param  TokensMap       All DNS transmittal Tokens entry.  \r
   @param  Identification  Identification for queried packet.  \r
   @param  Type            Type for queried packet.\r
+  @param  Class           Class for queried packet.\r
   @param  Item            Return corresponding Token entry.\r
 \r
   @retval TRUE            The response is valid.\r
@@ -572,6 +573,7 @@ IsValidDnsResponse (
   IN     NET_MAP      *TokensMap,\r
   IN     UINT16       Identification,\r
   IN     UINT16       Type,\r
+  IN     UINT16       Class,\r
      OUT NET_MAP_ITEM **Item\r
   );\r
 \r