]> git.proxmox.com Git - mirror_edk2.git/commitdiff
NetworkPkg/HttpDxe: fix read memory access overflow in HTTPBoot.
authorSongpeng Li <songpeng.li@intel.com>
Fri, 28 Sep 2018 03:02:34 +0000 (11:02 +0800)
committerFu Siyuan <siyuan.fu@intel.com>
Sat, 29 Sep 2018 02:51:27 +0000 (10:51 +0800)
The input param String of AsciiStrStr() requires a pointer to
 Null-terminated string, however in HttpTcpReceiveHeader(),
 the Buffersize before AllocateZeroPool() is equal to the size
 of TCP header, after the CopyMem(), it might not end with
 Null-terminator. It might cause memory access overflow.

Cc: Fu Siyuan <siyuan.fu@intel.com>
Cc: Wu Jiaxin <jiaxin.wu@intel.com>
Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=1204
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Songpeng Li <songpeng.li@intel.com>
Reviewed-by: Fu Siyuan <siyuan.fu@intel.com>
NetworkPkg/HttpDxe/HttpProto.c

index 94f89f5665846049c0aafbf471d18463d186d84e..7d69429be7937ead5c630b4903db265686a3b7be 100644 (file)
@@ -1914,10 +1914,10 @@ HttpTcpReceiveHeader (
       }\r
 \r
       //\r
-      // Append the response string.\r
+      // Append the response string along with a Null-terminator.\r
       //\r
       *BufferSize = *SizeofHeaders + Fragment.Len;\r
-      Buffer      = AllocateZeroPool (*BufferSize);\r
+      Buffer      = AllocatePool (*BufferSize + 1);\r
       if (Buffer == NULL) {\r
         Status = EFI_OUT_OF_RESOURCES;\r
         return Status;\r
@@ -1933,6 +1933,7 @@ HttpTcpReceiveHeader (
         Fragment.Bulk,\r
         Fragment.Len\r
         );\r
+      *(Buffer + *BufferSize) = '\0';\r
       *HttpHeaders   = Buffer;\r
       *SizeofHeaders = *BufferSize;\r
 \r
@@ -2013,10 +2014,10 @@ HttpTcpReceiveHeader (
       }\r
 \r
       //\r
-      // Append the response string.\r
+      // Append the response string along with a Null-terminator.\r
       //\r
       *BufferSize = *SizeofHeaders + Fragment.Len;\r
-      Buffer      = AllocateZeroPool (*BufferSize);\r
+      Buffer      = AllocatePool (*BufferSize + 1);\r
       if (Buffer == NULL) {\r
         Status = EFI_OUT_OF_RESOURCES;\r
         return Status;\r
@@ -2032,6 +2033,7 @@ HttpTcpReceiveHeader (
         Fragment.Bulk,\r
         Fragment.Len\r
         );\r
+      *(Buffer + *BufferSize) = '\0';\r
       *HttpHeaders   = Buffer;\r
       *SizeofHeaders = *BufferSize;\r
 \r