summaryrefslogtreecommitdiff
path: root/datapath-windows/ovsext/User.c
diff options
context:
space:
mode:
authorSorin Vinturis <svinturis@cloudbasesolutions.com>2014-11-19 07:16:32 +0000
committerGurucharan Shetty <gshetty@nicira.com>2014-11-20 07:18:23 -0800
commit3b60a203ed3a6ccc804c24468942db10d035a25a (patch)
tree9045dbecaf3f7daf46271a1a254490dbaafa76d7 /datapath-windows/ovsext/User.c
parent25f44d58248cf4ef46303cf3c35fbd28a493b266 (diff)
downloadopenvswitch-3b60a203ed3a6ccc804c24468942db10d035a25a.tar.gz
datapath-windows: Avoid BSOD when switch context is NULL
I came around a BSOD that happened when trying to access pidHashLock from the gOvsSwitchContext, which was NULL. The stop happened in OvsAcquirePidHashLock function. To reproduce this BSOD, make sure the extension is enabled and running, disable it and, after that, execute 'ovs-dpctl.exe show'. The BSOD is triggered afterwards. Signed-off-by: Sorin Vinturis <svinturis@cloudbasesolutions.com> Reported-by: Sorin Vinturis <svinturis@cloudbasesolutions.com> Reported-at: https://github.com/openvswitch/ovs-issues/issues/53 Acked-by: Eitan Eliahu <eliahue@vmware.com> Acked-by: Nithin Raju <nithin@vmware.com> Signed-off-by: Gurucharan Shetty <gshetty@nicira.com>
Diffstat (limited to 'datapath-windows/ovsext/User.c')
-rw-r--r--datapath-windows/ovsext/User.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/datapath-windows/ovsext/User.c b/datapath-windows/ovsext/User.c
index 96adb5c36..8473f98f3 100644
--- a/datapath-windows/ovsext/User.c
+++ b/datapath-windows/ovsext/User.c
@@ -141,10 +141,15 @@ OvsCleanupPacketQueue(POVS_OPEN_INSTANCE instance)
OvsFreeMemory(queue);
}
- /* Remove the instance from pidHashArray */
- OvsAcquirePidHashLock();
- OvsDelPidInstance(gOvsSwitchContext, instance->pid);
- OvsReleasePidHashLock();
+ /* Verify if gOvsSwitchContext exists. */
+ OvsAcquireCtrlLock();
+ if (gOvsSwitchContext) {
+ /* Remove the instance from pidHashArray */
+ OvsAcquirePidHashLock();
+ OvsDelPidInstance(gOvsSwitchContext, instance->pid);
+ OvsReleasePidHashLock();
+ }
+ OvsReleaseCtrlLock();
}
NTSTATUS