From 5b55d0abac9a20aeaf0820baf6b3954bf88efe58 Mon Sep 17 00:00:00 2001 From: Sorin Vinturis Date: Thu, 26 Mar 2015 19:59:37 +0000 Subject: [PATCH] datapath-windows: Added specific pool tag for oid code All memory allocations within oid code have 'ASVO' pool tag. Signed-off-by: Sorin Vinturis Reported-by: Alin Gabriel Serdean Reported-at: https://github.com/openvswitch/ovs-issues/issues/56 Acked-by: Alin Gabriel Serdean Acked-by: Eitan Eliahu Signed-off-by: Ben Pfaff --- datapath-windows/ovsext/Oid.c | 41 ++++++++++++++++++++++++---------- datapath-windows/ovsext/Oid.h | 3 +++ datapath-windows/ovsext/Util.h | 1 + 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/datapath-windows/ovsext/Oid.c b/datapath-windows/ovsext/Oid.c index 83fa1e30618..ea187906db2 100644 --- a/datapath-windows/ovsext/Oid.c +++ b/datapath-windows/ovsext/Oid.c @@ -605,7 +605,7 @@ OvsIssueOidRequest(POVS_SWITCH_CONTEXT switchContext, NDIS_STATUS status; PNDIS_OID_REQUEST oidRequest; POVS_OID_CONTEXT oidContext; - ULONG OvsExtOidRequestId = 'ISVO'; + ULONG OvsExtOidRequestId = 'ISVO'; DBG_UNREFERENCED_PARAMETER(inputSize); DBG_UNREFERENCED_PARAMETER(oidInputBuffer); @@ -617,15 +617,17 @@ OvsIssueOidRequest(POVS_SWITCH_CONTEXT switchContext, ASSERT(oidOutputBuffer == NULL || outputSize != 0); ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL); - oidRequest = OvsAllocateMemory(sizeof *oidRequest); + oidRequest = OvsAllocateMemoryWithTag(sizeof *oidRequest, + OVS_OID_POOL_TAG); if (!oidRequest) { status = NDIS_STATUS_RESOURCES; goto done; } - oidContext = OvsAllocateMemory(sizeof *oidContext); + oidContext = OvsAllocateMemoryWithTag(sizeof *oidContext, + OVS_OID_POOL_TAG); if (!oidContext) { - OvsFreeMemory(oidRequest); + OvsFreeMemoryWithTag(oidRequest, OVS_OID_POOL_TAG); status = NDIS_STATUS_RESOURCES; goto done; } @@ -684,8 +686,8 @@ OvsIssueOidRequest(POVS_SWITCH_CONTEXT switchContext, status = oidContext->status; ASSERT(status != NDIS_STATUS_PENDING); - OvsFreeMemory(oidRequest); - OvsFreeMemory(oidContext); + OvsFreeMemoryWithTag(oidRequest, OVS_OID_POOL_TAG); + OvsFreeMemoryWithTag(oidContext, OVS_OID_POOL_TAG); done: OVS_LOG_TRACE("Exit: status %8x.", status); @@ -710,7 +712,8 @@ OvsQuerySwitchActivationComplete(POVS_SWITCH_CONTEXT switchContext, OVS_LOG_TRACE("Enter: switchContext: %p, switchActive: %p", switchContext, switchActive); - switchParams = OvsAllocateMemory(sizeof *switchParams); + switchParams = OvsAllocateMemoryWithTag(sizeof *switchParams, + OVS_OID_POOL_TAG); if (!switchParams) { status = NDIS_STATUS_RESOURCES; goto done; @@ -741,7 +744,7 @@ OvsQuerySwitchActivationComplete(POVS_SWITCH_CONTEXT switchContext, *switchActive = switchParams->IsActive; } - OvsFreeMemory(switchParams); + OvsFreeMemoryWithTag(switchParams, OVS_OID_POOL_TAG); done: OVS_LOG_TRACE("Exit: status %8x, switchActive: %d.", @@ -769,7 +772,7 @@ OvsGetPortsOnSwitch(POVS_SWITCH_CONTEXT switchContext, do { UINT32 reqdArraySize; - portArray = OvsAllocateMemory(arraySize); + portArray = OvsAllocateMemoryWithTag(arraySize, OVS_OID_POOL_TAG); if (!portArray) { status = NDIS_STATUS_RESOURCES; goto done; @@ -794,7 +797,7 @@ OvsGetPortsOnSwitch(POVS_SWITCH_CONTEXT switchContext, break; } - OvsFreeMemory(portArray); + OvsFreeMemoryWithTag(portArray, OVS_OID_POOL_TAG); arraySize = reqdArraySize; if (status != NDIS_STATUS_INVALID_LENGTH) { break; @@ -827,7 +830,7 @@ OvsGetNicsOnSwitch(POVS_SWITCH_CONTEXT switchContext, do { UINT32 reqdArraySize; - nicArray = OvsAllocateMemory(arraySize); + nicArray = OvsAllocateMemoryWithTag(arraySize, OVS_OID_POOL_TAG); if (!nicArray) { status = NDIS_STATUS_RESOURCES; goto done; @@ -852,7 +855,7 @@ OvsGetNicsOnSwitch(POVS_SWITCH_CONTEXT switchContext, break; } - OvsFreeMemory(nicArray); + OvsFreeMemoryWithTag(nicArray, OVS_OID_POOL_TAG); arraySize = reqdArraySize; if (status != NDIS_STATUS_INVALID_LENGTH) { break; @@ -863,3 +866,17 @@ OvsGetNicsOnSwitch(POVS_SWITCH_CONTEXT switchContext, OVS_LOG_TRACE("Exit: status %8x.", status); return status; } + +VOID OvsFreeSwitchPortsArray(PNDIS_SWITCH_PORT_ARRAY portsArray) +{ + if (portsArray) { + OvsFreeMemoryWithTag(portsArray, OVS_OID_POOL_TAG); + } +} + +VOID OvsFreeSwitchNicsArray(PNDIS_SWITCH_NIC_ARRAY nicsArray) +{ + if (nicsArray) { + OvsFreeMemoryWithTag(nicsArray, OVS_OID_POOL_TAG); + } +} diff --git a/datapath-windows/ovsext/Oid.h b/datapath-windows/ovsext/Oid.h index 88a3d7d044d..ffa4d60cbd3 100644 --- a/datapath-windows/ovsext/Oid.h +++ b/datapath-windows/ovsext/Oid.h @@ -23,4 +23,7 @@ NDIS_STATUS OvsGetPortsOnSwitch(POVS_SWITCH_CONTEXT switchContext, PNDIS_SWITCH_PORT_ARRAY *portArrayOut); NDIS_STATUS OvsGetNicsOnSwitch(POVS_SWITCH_CONTEXT switchContext, PNDIS_SWITCH_NIC_ARRAY *nicArrayOut); +VOID OvsFreeSwitchPortsArray(PNDIS_SWITCH_PORT_ARRAY portsArray); +VOID OvsFreeSwitchNicsArray(PNDIS_SWITCH_NIC_ARRAY nicsArray); + #endif /* __OID_H_ */ diff --git a/datapath-windows/ovsext/Util.h b/datapath-windows/ovsext/Util.h index c410729e334..115f334f005 100644 --- a/datapath-windows/ovsext/Util.h +++ b/datapath-windows/ovsext/Util.h @@ -29,6 +29,7 @@ #define OVS_FLOW_POOL_TAG 'LSVO' #define OVS_VXLAN_POOL_TAG 'XSVO' #define OVS_IPHELPER_POOL_TAG 'HSVO' +#define OVS_OID_POOL_TAG 'ASVO' VOID *OvsAllocateMemory(size_t size); VOID *OvsAllocateMemoryWithTag(size_t size, ULONG tag);