Nithin, In my tests with Driver Verifier enabled I bumped into a situation when NdisFRegisterFilterDriver() failed. In this case DriverEntry() returned an error, without releasing the spinlocks allocated in OvsInit(), which resulted in a memory leak BSOD triggered by the Driver Verifier. The patch solves this issue.
-Sorin -----Original Message----- From: Nithin Raju [mailto:nit...@vmware.com] Sent: Tuesday, 1 September, 2015 17:41 To: Sorin Vinturis Cc: dev@openvswitch.org Subject: Re: [ovs-dev] [PATCH] datapath-windows: Proper cleanup in case of driver init failure Sorin, Unless I’m missing something here, what is the new cleanup added in this patch? It seems more of code refactoring. Is that right? -- Nithin > On Sep 1, 2015, at 5:16 AM, Sorin Vinturis <svintu...@cloudbasesolutions.com> > wrote: > > Signed-off-by: Sorin Vinturis <svintu...@cloudbasesolutions.com> > --- > datapath-windows/ovsext/Driver.c | 20 ++++++++++++++------ > 1 file changed, 14 insertions(+), 6 deletions(-) > > diff --git a/datapath-windows/ovsext/Driver.c > b/datapath-windows/ovsext/Driver.c > index 13fcde2..853886e 100644 > --- a/datapath-windows/ovsext/Driver.c > +++ b/datapath-windows/ovsext/Driver.c > @@ -139,18 +139,26 @@ DriverEntry(PDRIVER_OBJECT driverObject, > driverObject->DriverUnload = OvsExtUnload; > > status = NdisFRegisterFilterDriver(driverObject, > - (NDIS_HANDLE) gOvsExtDriverObject, > - &driverChars, &gOvsExtDriverHandle); > + (NDIS_HANDLE)gOvsExtDriverObject, > + &driverChars, > + &gOvsExtDriverHandle); > if (status != NDIS_STATUS_SUCCESS) { > - return status; > + goto cleanup; > } > > - /* Create the communication channel for usersapce. */ > + /* Create the communication channel for userspace. */ > status = OvsCreateDeviceObject(gOvsExtDriverHandle); > if (status != NDIS_STATUS_SUCCESS) { > + goto cleanup; > + } > + > +cleanup: > + if (status != NDIS_STATUS_SUCCESS){ > OvsCleanup(); > - NdisFDeregisterFilterDriver(gOvsExtDriverHandle); > - gOvsExtDriverHandle = NULL; > + if (gOvsExtDriverHandle) { > + NdisFDeregisterFilterDriver(gOvsExtDriverHandle); > + gOvsExtDriverHandle = NULL; > + } > } > > return status; > -- > 1.9.0.msysgit.0 > _______________________________________________ > dev mailing list > dev@openvswitch.org > https://urldefense.proofpoint.com/v2/url?u=http-3A__openvswitch.org_mailman_listinfo_dev&d=BQIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=pNHQcdr7B40b4h6Yb7FIedI1dnBsxdDuTLBYD3JqV80&m=UwM9RbSBfs6QT8UYqjkZr3xJUSmm5djIml87xTIB1WI&s=tQaG105CKQjdDBWZXvRzD9eqd2rsnJDji_xikpq6S7A&e= > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev