All memory allocations within datapath code have 'DSVO' pool tag. Signed-off-by: Sorin Vinturis <svintu...@cloudbasesolutions.com> Reported-by: Alin Gabriel Serdean <aserd...@cloudbasesolutions.com> Reported-at: https://github.com/openvswitch/ovs-issues/issues/56 Acked-by: Alin Gabriel Serdean <aserd...@cloudbasesolutions.com> Acked-by: Eitan Eliahu <elia...@vmware.com> --- datapath-windows/ovsext/Datapath.c | 38 +++++++++++++++++++++++++++++++++++--- datapath-windows/ovsext/Datapath.h | 31 +++---------------------------- datapath-windows/ovsext/Util.h | 1 + 3 files changed, 39 insertions(+), 31 deletions(-)
diff --git a/datapath-windows/ovsext/Datapath.c b/datapath-windows/ovsext/Datapath.c index c6fe89e..888c6ef 100644 --- a/datapath-windows/ovsext/Datapath.c +++ b/datapath-windows/ovsext/Datapath.c @@ -349,6 +349,37 @@ extern POVS_SWITCH_CONTEXT gOvsSwitchContext; NDIS_SPIN_LOCK ovsCtrlLockObj; PNDIS_SPIN_LOCK gOvsCtrlLock; +NTSTATUS +InitUserDumpState(POVS_OPEN_INSTANCE instance, + POVS_MESSAGE ovsMsg) +{ + /* Clear the dumpState from a previous dump sequence. */ + ASSERT(instance->dumpState.ovsMsg == NULL); + ASSERT(ovsMsg); + + instance->dumpState.ovsMsg = + (POVS_MESSAGE)OvsAllocateMemoryWithTag(sizeof(OVS_MESSAGE), + OVS_DATAPATH_POOL_TAG); + if (instance->dumpState.ovsMsg == NULL) { + return STATUS_NO_MEMORY; + } + RtlCopyMemory(instance->dumpState.ovsMsg, ovsMsg, + sizeof *instance->dumpState.ovsMsg); + RtlZeroMemory(instance->dumpState.index, + sizeof instance->dumpState.index); + + return STATUS_SUCCESS; +} + +VOID +FreeUserDumpState(POVS_OPEN_INSTANCE instance) +{ + if (instance->dumpState.ovsMsg != NULL) { + OvsFreeMemoryWithTag(instance->dumpState.ovsMsg, + OVS_DATAPATH_POOL_TAG); + RtlZeroMemory(&instance->dumpState, sizeof instance->dumpState); + } +} VOID OvsInit() @@ -497,7 +528,8 @@ OvsAddOpenInstance(POVS_DEVICE_EXTENSION ovsExt, PFILE_OBJECT fileObject) { POVS_OPEN_INSTANCE instance = - (POVS_OPEN_INSTANCE) OvsAllocateMemory(sizeof (OVS_OPEN_INSTANCE)); + (POVS_OPEN_INSTANCE)OvsAllocateMemoryWithTag(sizeof(OVS_OPEN_INSTANCE), + OVS_DATAPATH_POOL_TAG); UINT32 i; if (instance == NULL) { @@ -508,7 +540,7 @@ OvsAddOpenInstance(POVS_DEVICE_EXTENSION ovsExt, if (ovsNumberOfOpenInstances >= OVS_MAX_OPEN_INSTANCES) { OvsReleaseCtrlLock(); - OvsFreeMemory(instance); + OvsFreeMemoryWithTag(instance, OVS_DATAPATH_POOL_TAG); return STATUS_INSUFFICIENT_RESOURCES; } RtlZeroMemory(instance, sizeof (OVS_OPEN_INSTANCE)); @@ -559,7 +591,7 @@ OvsRemoveOpenInstance(PFILE_OBJECT fileObject) OvsReleaseCtrlLock(); ASSERT(instance->eventQueue == NULL); ASSERT (instance->packetQueue == NULL); - OvsFreeMemory(instance); + OvsFreeMemoryWithTag(instance, OVS_DATAPATH_POOL_TAG); } NTSTATUS diff --git a/datapath-windows/ovsext/Datapath.h b/datapath-windows/ovsext/Datapath.h index ba31ece..863afc4 100644 --- a/datapath-windows/ovsext/Datapath.h +++ b/datapath-windows/ovsext/Datapath.h @@ -129,35 +129,10 @@ InitUserParamsCtx(PIRP irp, usrParamsCtx->outputLength = outputLength; } -static __inline NTSTATUS -InitUserDumpState(POVS_OPEN_INSTANCE instance, - POVS_MESSAGE ovsMsg) -{ - /* Clear the dumpState from a previous dump sequence. */ - ASSERT(instance->dumpState.ovsMsg == NULL); - ASSERT(ovsMsg); - - instance->dumpState.ovsMsg = - (POVS_MESSAGE) OvsAllocateMemory(sizeof (OVS_MESSAGE)); - if (instance->dumpState.ovsMsg == NULL) { - return STATUS_NO_MEMORY; - } - RtlCopyMemory(instance->dumpState.ovsMsg, ovsMsg, - sizeof *instance->dumpState.ovsMsg); - RtlZeroMemory(instance->dumpState.index, - sizeof instance->dumpState.index); - - return STATUS_SUCCESS; -} +NTSTATUS InitUserDumpState(POVS_OPEN_INSTANCE instance, + POVS_MESSAGE ovsMsg); -static __inline VOID -FreeUserDumpState(POVS_OPEN_INSTANCE instance) -{ - if (instance->dumpState.ovsMsg != NULL) { - OvsFreeMemory(instance->dumpState.ovsMsg); - RtlZeroMemory(&instance->dumpState, sizeof instance->dumpState); - } -} +VOID FreeUserDumpState(POVS_OPEN_INSTANCE instance); NTSTATUS OvsSetupDumpStart(POVS_USER_PARAMS_CONTEXT usrParamsCtx); diff --git a/datapath-windows/ovsext/Util.h b/datapath-windows/ovsext/Util.h index 0303f46..0f32654 100644 --- a/datapath-windows/ovsext/Util.h +++ b/datapath-windows/ovsext/Util.h @@ -23,6 +23,7 @@ #define OVS_NBL_ONLY_POOL_TAG 'OSVO' #define OVS_NET_BUFFER_POOL_TAG 'NSVO' #define OVS_OTHER_POOL_TAG 'MSVO' +#define OVS_DATAPATH_POOL_TAG 'DSVO' VOID *OvsAllocateMemory(size_t size); VOID *OvsAllocateMemoryWithTag(size_t size, ULONG tag); -- 1.9.0.msysgit.0 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev