All memory allocations within oid code have 'ASVO' pool tag.
Signed-off-by: Sorin Vinturis <[email protected]>
Reported-by: Alin Gabriel Serdean <[email protected]>
Reported-at: https://github.com/openvswitch/ovs-issues/issues/56
---
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 83fa1e3..c94d17e 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 @@ done:
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);
+ }
+}
\ No newline at end of file
diff --git a/datapath-windows/ovsext/Oid.h b/datapath-windows/ovsext/Oid.h
index 88a3d7d..ffa4d60 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 c410729..115f334 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);
--
1.9.0.msysgit.0
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev