|
@@ -219,21 +219,20 @@ void nf_reinject(struct sk_buff *skb, struct nf_info *info,
|
|
|
|
|
|
switch (verdict & NF_VERDICT_MASK) {
|
|
switch (verdict & NF_VERDICT_MASK) {
|
|
case NF_ACCEPT:
|
|
case NF_ACCEPT:
|
|
|
|
+ case NF_STOP:
|
|
info->okfn(skb);
|
|
info->okfn(skb);
|
|
|
|
+ case NF_STOLEN:
|
|
break;
|
|
break;
|
|
-
|
|
|
|
case NF_QUEUE:
|
|
case NF_QUEUE:
|
|
if (!nf_queue(&skb, elem, info->pf, info->hook,
|
|
if (!nf_queue(&skb, elem, info->pf, info->hook,
|
|
info->indev, info->outdev, info->okfn,
|
|
info->indev, info->outdev, info->okfn,
|
|
verdict >> NF_VERDICT_BITS))
|
|
verdict >> NF_VERDICT_BITS))
|
|
goto next_hook;
|
|
goto next_hook;
|
|
break;
|
|
break;
|
|
|
|
+ default:
|
|
|
|
+ kfree_skb(skb);
|
|
}
|
|
}
|
|
rcu_read_unlock();
|
|
rcu_read_unlock();
|
|
-
|
|
|
|
- if (verdict == NF_DROP)
|
|
|
|
- kfree_skb(skb);
|
|
|
|
-
|
|
|
|
kfree(info);
|
|
kfree(info);
|
|
return;
|
|
return;
|
|
}
|
|
}
|