Skip to content

Commit 0cad866

Browse files
committed
Fix potential integer overflow in TapSharedSendPacket
Following code: unsigned int fullLength; <..> fullLength = PacketLength + PrefixLength; could cause integer overflow, which will result in allocation of smaller size of memory, which later causes buffer overflow and a bug check. Fix by checking overflow condition and fail the IRP in case of overflow. CVE: 2024-1305 Reported-by: Vladimir Tokarev <vtokarev@microsoft.com> Signed-off-by: Lev Stipakov <lev@openvpn.net>
1 parent dc230ae commit 0cad866

File tree

2 files changed

+19
-7
lines changed

2 files changed

+19
-7
lines changed

src/rxpath.c

+15-3
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
// Include files.
2727
//
2828

29+
#include <limits.h>
30+
2931
#include "tap.h"
3032

3133
//======================================================================
@@ -398,14 +400,24 @@ TapSharedSendPacket(
398400
)
399401
{
400402
PIO_STACK_LOCATION irpSp;
401-
unsigned int fullLength;
402403
PNET_BUFFER_LIST netBufferList = NULL;
403404
PMDL mdl = NULL; // Head of MDL chain.
404405
LONG nblCount;
405406

406-
407407
irpSp = IoGetCurrentIrpStackLocation( Irp );
408-
fullLength = PacketLength + PrefixLength;
408+
409+
// check for possible ULONG overflow
410+
if ((ULONG_MAX - PacketLength) < PrefixLength)
411+
{
412+
DEBUGP (("[%s] Packet size with prefix exceeds ULONG_MAX\n", MINIPORT_INSTANCE_ID (Adapter)));
413+
NOTE_ERROR ();
414+
415+
// Fail the IRP
416+
Irp->IoStatus.Information = 0;
417+
return STATUS_INSUFFICIENT_RESOURCES;
418+
}
419+
420+
ULONG fullLength = PacketLength + PrefixLength;
409421

410422
if(fullLength < TAP_MIN_FRAME_SIZE)
411423
{

version.m4

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ dnl define the TAP version
22
define([PRODUCT_NAME], [TAP-Windows])
33
define([PRODUCT_PACKAGE_NAME], [tap-windows])
44
define([PRODUCT_PUBLISHER], [OpenVPN Technologies, Inc.])
5-
define([PRODUCT_VERSION], [9.26.0])
6-
define([PRODUCT_VERSION_RESOURCE], [9,26,0,0])
5+
define([PRODUCT_VERSION], [9.27.0])
6+
define([PRODUCT_VERSION_RESOURCE], [9,27,0,0])
77
define([PRODUCT_TAP_WIN_COMPONENT_ID], [tap0901])
88
define([PRODUCT_TAP_WIN_MAJOR], [9])
9-
define([PRODUCT_TAP_WIN_MINOR], [26])
9+
define([PRODUCT_TAP_WIN_MINOR], [27])
1010
define([PRODUCT_TAP_WIN_REVISION], [0])
1111
define([PRODUCT_TAP_WIN_BUILD], [0])
1212
define([PRODUCT_TAP_WIN_PROVIDER], [TAP-Windows Provider V9])
1313
define([PRODUCT_TAP_WIN_CHARACTERISTICS], [0x1])
1414
define([PRODUCT_TAP_WIN_DEVICE_DESCRIPTION], [TAP-Windows Adapter V9])
15-
define([PRODUCT_TAP_WIN_RELDATE], [04/27/2023])
15+
define([PRODUCT_TAP_WIN_RELDATE], [02/27/2024])

0 commit comments

Comments
 (0)