diff mbox

[edk2] MdeModulePkg: DxeUdpIoLib: fix non-empty payload path in UDP reception

Message ID 1459678418-25820-1-git-send-email-lersek@redhat.com
State Accepted
Commit 166a6552a829ab680862331449f11970c085f26d
Headers show

Commit Message

Laszlo Ersek April 3, 2016, 10:13 a.m. UTC
Commit 1b31acb66c02 ("MdeModulePkg: Check received packet size before use
it.") introduced a chunk of code under the new "Resume" label, in function
UdpIoOnDgramRcvdDpc(). The new code is supposed to run only when the
received packet has zero-length payload, but a "return" statement was
forgotten, and the code is reached on the normal (nonzero-length payload)
path as well, after the packet has been processed (and possibly freed) by
RxToken->CallBack(). This is a logic bug, with the direct symptom being
use-after-free / General Protection Fault.

Cc: Siyuan Fu <siyuan.fu@intel.com>
Cc: Jiaxin Wu <jiaxin.wu@intel.com>
Cc: Ting Ye <ting.ye@intel.com>
Cc: "Subramanian, Sriram (EG Servers Platform SW)" <sriram-s@hpe.com>
Fixes: 1b31acb66c026f2791c959a4ec9b55c04d583c22
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <lersek@redhat.com>

---
 MdeModulePkg/Library/DxeUdpIoLib/DxeUdpIoLib.c | 1 +
 1 file changed, 1 insertion(+)

-- 
1.8.3.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Comments

Laszlo Ersek April 4, 2016, 11:56 a.m. UTC | #1
On 04/04/16 05:45, Subramanian, Sriram (EG Servers Platform SW) wrote:
> Thanks for testing that, Laszlo.

> 

> Reviewed-by: Sriram Subramanian <sriram-s@hpe.com>


Thanks a lot for the quick review!

Since this bug makes OVMF more or less unusable, I pushed the patch
(which is also very simple) with your R-b: 166a6552a829.

Thanks!
Laszlo

> -----Original Message-----

> From: Laszlo Ersek [mailto:lersek@redhat.com] 

> Sent: Sunday, April 3, 2016 3:44 PM

> To: edk2-devel-01 <edk2-devel@ml01.01.org>

> Cc: Siyuan Fu <siyuan.fu@intel.com>; Jiaxin Wu <jiaxin.wu@intel.com>; Ting Ye <ting.ye@intel.com>; Subramanian, Sriram (EG Servers Platform SW) <sriram-s@hpe.com>

> Subject: [PATCH] MdeModulePkg: DxeUdpIoLib: fix non-empty payload path in UDP reception

> 

> Commit 1b31acb66c02 ("MdeModulePkg: Check received packet size before use

> it.") introduced a chunk of code under the new "Resume" label, in function

> UdpIoOnDgramRcvdDpc(). The new code is supposed to run only when the

> received packet has zero-length payload, but a "return" statement was

> forgotten, and the code is reached on the normal (nonzero-length payload)

> path as well, after the packet has been processed (and possibly freed) by

> RxToken->CallBack(). This is a logic bug, with the direct symptom being

> use-after-free / General Protection Fault.

> 

> Cc: Siyuan Fu <siyuan.fu@intel.com>

> Cc: Jiaxin Wu <jiaxin.wu@intel.com>

> Cc: Ting Ye <ting.ye@intel.com>

> Cc: "Subramanian, Sriram (EG Servers Platform SW)" <sriram-s@hpe.com>

> Fixes: 1b31acb66c026f2791c959a4ec9b55c04d583c22

> Contributed-under: TianoCore Contribution Agreement 1.0

> Signed-off-by: Laszlo Ersek <lersek@redhat.com>

> ---

>  MdeModulePkg/Library/DxeUdpIoLib/DxeUdpIoLib.c | 1 +

>  1 file changed, 1 insertion(+)

> 

> diff --git a/MdeModulePkg/Library/DxeUdpIoLib/DxeUdpIoLib.c b/MdeModulePkg/Library/DxeUdpIoLib/DxeUdpIoLib.c

> index 4f7126d3ce56..4861095435e6 100644

> --- a/MdeModulePkg/Library/DxeUdpIoLib/DxeUdpIoLib.c

> +++ b/MdeModulePkg/Library/DxeUdpIoLib/DxeUdpIoLib.c

> @@ -303,6 +303,7 @@ UdpIoOnDgramRcvdDpc (

>    }

>  

>    RxToken->CallBack (Netbuf, &EndPoint, EFI_SUCCESS, RxToken->Context);

> +  return;

>  

>  Resume:

>    if (RxToken->UdpIo->UdpVersion == UDP_IO_UDP4_VERSION) {

> 


_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
diff mbox

Patch

diff --git a/MdeModulePkg/Library/DxeUdpIoLib/DxeUdpIoLib.c b/MdeModulePkg/Library/DxeUdpIoLib/DxeUdpIoLib.c
index 4f7126d3ce56..4861095435e6 100644
--- a/MdeModulePkg/Library/DxeUdpIoLib/DxeUdpIoLib.c
+++ b/MdeModulePkg/Library/DxeUdpIoLib/DxeUdpIoLib.c
@@ -303,6 +303,7 @@  UdpIoOnDgramRcvdDpc (
   }
 
   RxToken->CallBack (Netbuf, &EndPoint, EFI_SUCCESS, RxToken->Context);
+  return;
 
 Resume:
   if (RxToken->UdpIo->UdpVersion == UDP_IO_UDP4_VERSION) {