If an error appears when creating a tunnel vport the cleanup is performed twice, which causes the tunnel vport to be released also twice and generate a BSOD.
This patch modifies the tunnel filter cleanup logic to avoid this issue. Signed-off-by: Sorin Vinturis <svintu...@cloudbasesolutions.com> Reported-by: Sorin Vinturis <svintu...@cloudbasesolutions.com> Reported-at: https://github.com/openvswitch/ovs-issues/issues/97 Acked-by: Nithin Raju <nit...@vmware.com> --- v2: added acked. --- datapath-windows/ovsext/TunnelFilter.c | 1 - datapath-windows/ovsext/Vport.c | 7 ++++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/datapath-windows/ovsext/TunnelFilter.c b/datapath-windows/ovsext/TunnelFilter.c index d736c19..7865451 100644 --- a/datapath-windows/ovsext/TunnelFilter.c +++ b/datapath-windows/ovsext/TunnelFilter.c @@ -1419,7 +1419,6 @@ OvsTunnelFilterQueueRequest(PIRP irp, } while (error); if (error) { - OvsTunnelFilterCompleteRequest(irp, callback, tunnelContext, status); if (request) { OvsFreeMemory(request); request = NULL; diff --git a/datapath-windows/ovsext/Vport.c b/datapath-windows/ovsext/Vport.c index d9f489f..b2ff308 100644 --- a/datapath-windows/ovsext/Vport.c +++ b/datapath-windows/ovsext/Vport.c @@ -920,7 +920,8 @@ OvsInitTunnelVport(PVOID userContext, { POVS_TUNFLT_INIT_CONTEXT tunnelContext = NULL; - tunnelContext = OvsAllocateMemory(sizeof(*tunnelContext)); + tunnelContext = OvsAllocateMemoryWithTag(sizeof(*tunnelContext), + OVS_VPORT_POOL_TAG); if (tunnelContext == NULL) { status = STATUS_INSUFFICIENT_RESOURCES; break; @@ -935,6 +936,10 @@ OvsInitTunnelVport(PVOID userContext, dstPort, OvsTunnelVportPendingInit, (PVOID)tunnelContext); + if (status != STATUS_PENDING) { + OvsFreeMemoryWithTag(tunnelContext, OVS_VPORT_POOL_TAG); + tunnelContext = NULL; + } break; } case OVS_VPORT_TYPE_STT: -- 1.9.0.msysgit.0 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev