diff options
author | Florian Westphal <fw@strlen.de> | 2011-01-18 15:28:38 +0100 |
---|---|---|
committer | Patrick McHardy <kaber@trash.net> | 2011-01-18 15:28:38 +0100 |
commit | 06cdb6349c1f3fd439398dbc04ce4c696f0a41ab (patch) | |
tree | 986b91560853dc2d0f8b67a3f61de35e103c4dc4 /net/netfilter/core.c | |
parent | f15850861860636c905b33a9a5be3dcbc2b0d56a (diff) |
netfilter: nfnetlink_queue: do not free skb on error
Move free responsibility from nf_queue to caller.
This enables more flexible error handling; we can now accept the skb
instead of freeing it.
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Patrick McHardy <kaber@trash.net>
Diffstat (limited to 'net/netfilter/core.c')
-rw-r--r-- | net/netfilter/core.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/net/netfilter/core.c b/net/netfilter/core.c index 91d66d2f8cd..0c5b796ef52 100644 --- a/net/netfilter/core.c +++ b/net/netfilter/core.c @@ -181,8 +181,11 @@ next_hook: } else if ((verdict & NF_VERDICT_MASK) == NF_QUEUE) { ret = nf_queue(skb, elem, pf, hook, indev, outdev, okfn, verdict >> NF_VERDICT_BITS); - if (ret == -ECANCELED) - goto next_hook; + if (ret < 0) { + if (ret == -ECANCELED) + goto next_hook; + kfree_skb(skb); + } ret = 0; } rcu_read_unlock(); |