datapath-windows: Re-init the list entry in OvsDeleteVportCmdHandler().
authorNithin Raju <nithin@vmware.com>
Fri, 24 Oct 2014 00:33:08 +0000 (17:33 -0700)
committerBen Pfaff <blp@nicira.com>
Tue, 28 Oct 2014 15:34:17 +0000 (08:34 -0700)
Without this patch, the kernel crashes when it tries to cleanup a port
at unload time when a port has been previously deleted from userspace.
Crash is in OvsRemoveAndDeleteVport() when we call into
RemoveEntryList().

Signed-off-by: Nithin Raju <nithin@vmware.com>
Acked-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Tested-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
datapath-windows/ovsext/Datapath.c

index edb2bde..17f2e3a 100644 (file)
@@ -2065,7 +2065,8 @@ OvsDeleteVportCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx,
 
     static const NL_POLICY ovsVportPolicy[] = {
         [OVS_VPORT_ATTR_PORT_NO] = { .type = NL_A_U32, .optional = TRUE },
-        [OVS_VPORT_ATTR_NAME] = { .type = NL_A_STRING, .maxLen = IFNAMSIZ, .optional = TRUE },
+        [OVS_VPORT_ATTR_NAME] = { .type = NL_A_STRING, .maxLen = IFNAMSIZ,
+                                  .optional = TRUE },
     };
     PNL_ATTR vportAttrs[ARRAY_SIZE(ovsVportPolicy)];
 
@@ -2130,7 +2131,9 @@ OvsDeleteVportCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx,
          * "not created", i.e. we set vport->portNo = OVS_PORT_NUMBER_INVALID.
         */
         RemoveEntryList(&vport->ovsNameLink);
+        InitializeListHead(&vport->ovsNameLink);
         RemoveEntryList(&vport->portNoLink);
+        InitializeListHead(&vport->portNoLink);
         vport->portNo = OVS_DPPORT_NUMBER_INVALID;
         vport->ovsName[0] = '\0';
     }