@@ -529,8 +529,10 @@ static int execute_recirc(struct datapath *dp, struct sk_buff *skb,
int err;
err = ovs_flow_extract(skb, p->port_no, &recirc_key);
- if (err)
+ if (err) {
+ kfree_skb(skb);
return err;
+ }
recirc_key.ovs_flow_hash = hash;
recirc_key.recirc_id = nla_get_u32(a);
@@ -602,7 +604,7 @@ static int do_execute_actions(struct datapath *dp, struct sk_buff *skb,
err = execute_recirc(dp, recirc_skb, a);
__this_cpu_dec(net_xmit_recursion);
- if (last_action || err)
+ if (recirc_skb == skb)
return err;
break;