Navigation Menu

Skip to content

Commit

Permalink
datapath-windows: Fix invalid reference in Buffermgmt.c
Browse files Browse the repository at this point in the history
OVS_BUFFER_CONTEXT gets cleared as part of NdisFreeNetBufferListContext
function call. This causes an invalid reference error.

Found while testing with driver verifier enabled.

Signed-off-by: Sairam Venugopal <vsairam@vmware.com>
Acked-by: Anand Kumar <kumaranand@vmware.com>
Acked-by: Alin Gabriel Serdean <aserdean@ovn.org>
Signed-off-by: Alin Gabriel Serdean <aserdean@ovn.org>
  • Loading branch information
Sairam Venugopal authored and aserdean committed Dec 14, 2018
1 parent e2e5db1 commit 9706b10
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions datapath-windows/ovsext/BufferMgmt.c
Expand Up @@ -1622,6 +1622,7 @@ OvsCompleteNBL(PVOID switch_ctx,
{
POVS_BUFFER_CONTEXT ctx;
UINT16 flags;
UINT32 dataOffsetDelta;
PNET_BUFFER_LIST parent;
NDIS_STATUS status;
NDIS_HANDLE poolHandle;
Expand Down Expand Up @@ -1653,6 +1654,7 @@ OvsCompleteNBL(PVOID switch_ctx,
nb = NET_BUFFER_LIST_FIRST_NB(nbl);

flags = ctx->flags;
dataOffsetDelta = ctx->dataOffsetDelta;
if (!(flags & OVS_BUFFER_FRAGMENT) &&
NET_BUFFER_DATA_LENGTH(nb) != ctx->origDataLength) {
UINT32 diff;
Expand All @@ -1667,7 +1669,7 @@ OvsCompleteNBL(PVOID switch_ctx,
}
}

if (ctx->flags & OVS_BUFFER_PRIVATE_CONTEXT) {
if (flags & OVS_BUFFER_PRIVATE_CONTEXT) {
NdisFreeNetBufferListContext(nbl, sizeof (OVS_BUFFER_CONTEXT));
}

Expand Down Expand Up @@ -1740,7 +1742,7 @@ OvsCompleteNBL(PVOID switch_ctx,
#ifdef DBG
InterlockedDecrement((LONG volatile *)&ovsPool->fragNBLCount);
#endif
NdisFreeFragmentNetBufferList(nbl, ctx->dataOffsetDelta, 0);
NdisFreeFragmentNetBufferList(nbl, dataOffsetDelta, 0);
}

if (parent != NULL) {
Expand Down

0 comments on commit 9706b10

Please sign in to comment.