When the recirc action is in middle, the current code creates a clone of the NBL. However, it overwrites the pointer to point to the cloned NBL without completing it. This causes a memory leak that crashes the kernel.
Signed-off-by: Sairam Venugopal <vsai...@vmware.com> --- datapath-windows/ovsext/Actions.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/datapath-windows/ovsext/Actions.c b/datapath-windows/ovsext/Actions.c index 5dae6b4..5ad29ee 100644 --- a/datapath-windows/ovsext/Actions.c +++ b/datapath-windows/ovsext/Actions.c @@ -1557,10 +1557,14 @@ OvsExecuteRecirc(OvsForwardingContext *ovsFwdCtx, ovsActionStats.noCopiedNbl++; return NDIS_STATUS_SUCCESS; } - ovsFwdCtx->curNbl = newNbl; } - deferredAction = OvsAddDeferredActions(ovsFwdCtx->curNbl, key, NULL); + if (newNbl) { + deferredAction = OvsAddDeferredActions(newNbl, key, NULL); + } else { + deferredAction = OvsAddDeferredActions(ovsFwdCtx->curNbl, key, NULL); + } + if (deferredAction) { deferredAction->key.recircId = NlAttrGetU32(actions); } else { -- 1.9.5.msysgit.0 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev