aboutsummaryrefslogtreecommitdiffstats
path: root/net/netfilter
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2015-10-13 08:33:27 -0400
committerPablo Neira Ayuso <pablo@netfilter.org>2015-10-16 12:22:23 -0400
commited78d09d59ba9764b7454e8e1ccbb0072a55b6d7 (patch)
tree1971277eedd1743779e29f66a1ddb741976bec27 /net/netfilter
parent2ffbceb2b08f8ca0496c54a9ebcd11d25275954e (diff)
netfilter: make nf_queue_entry_get_refs return void
We don't care if module is being unloaded anymore since hook unregister handling will destroy queue entries using that hook. Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'net/netfilter')
-rw-r--r--net/netfilter/core.c2
-rw-r--r--net/netfilter/nf_queue.c11
-rw-r--r--net/netfilter/nfnetlink_queue.c11
3 files changed, 6 insertions, 18 deletions
diff --git a/net/netfilter/core.c b/net/netfilter/core.c
index 32a289420caf..09e661c3ae58 100644
--- a/net/netfilter/core.c
+++ b/net/netfilter/core.c
@@ -313,8 +313,6 @@ next_hook:
313 int err = nf_queue(skb, elem, state, 313 int err = nf_queue(skb, elem, state,
314 verdict >> NF_VERDICT_QBITS); 314 verdict >> NF_VERDICT_QBITS);
315 if (err < 0) { 315 if (err < 0) {
316 if (err == -ECANCELED)
317 goto next_hook;
318 if (err == -ESRCH && 316 if (err == -ESRCH &&
319 (verdict & NF_VERDICT_FLAG_QUEUE_BYPASS)) 317 (verdict & NF_VERDICT_FLAG_QUEUE_BYPASS))
320 goto next_hook; 318 goto next_hook;
diff --git a/net/netfilter/nf_queue.c b/net/netfilter/nf_queue.c
index eef1c50e0e21..efc968807199 100644
--- a/net/netfilter/nf_queue.c
+++ b/net/netfilter/nf_queue.c
@@ -73,7 +73,7 @@ void nf_queue_entry_release_refs(struct nf_queue_entry *entry)
73EXPORT_SYMBOL_GPL(nf_queue_entry_release_refs); 73EXPORT_SYMBOL_GPL(nf_queue_entry_release_refs);
74 74
75/* Bump dev refs so they don't vanish while packet is out */ 75/* Bump dev refs so they don't vanish while packet is out */
76bool nf_queue_entry_get_refs(struct nf_queue_entry *entry) 76void nf_queue_entry_get_refs(struct nf_queue_entry *entry)
77{ 77{
78 struct nf_hook_state *state = &entry->state; 78 struct nf_hook_state *state = &entry->state;
79 79
@@ -95,8 +95,6 @@ bool nf_queue_entry_get_refs(struct nf_queue_entry *entry)
95 dev_hold(physdev); 95 dev_hold(physdev);
96 } 96 }
97#endif 97#endif
98
99 return true;
100} 98}
101EXPORT_SYMBOL_GPL(nf_queue_entry_get_refs); 99EXPORT_SYMBOL_GPL(nf_queue_entry_get_refs);
102 100
@@ -151,10 +149,7 @@ int nf_queue(struct sk_buff *skb,
151 .size = sizeof(*entry) + afinfo->route_key_size, 149 .size = sizeof(*entry) + afinfo->route_key_size,
152 }; 150 };
153 151
154 if (!nf_queue_entry_get_refs(entry)) { 152 nf_queue_entry_get_refs(entry);
155 status = -ECANCELED;
156 goto err_unlock;
157 }
158 skb_dst_force(skb); 153 skb_dst_force(skb);
159 afinfo->saveroute(skb, entry); 154 afinfo->saveroute(skb, entry);
160 status = qh->outfn(entry, queuenum); 155 status = qh->outfn(entry, queuenum);
@@ -215,8 +210,6 @@ void nf_reinject(struct nf_queue_entry *entry, unsigned int verdict)
215 err = nf_queue(skb, elem, &entry->state, 210 err = nf_queue(skb, elem, &entry->state,
216 verdict >> NF_VERDICT_QBITS); 211 verdict >> NF_VERDICT_QBITS);
217 if (err < 0) { 212 if (err < 0) {
218 if (err == -ECANCELED)
219 goto next_hook;
220 if (err == -ESRCH && 213 if (err == -ESRCH &&
221 (verdict & NF_VERDICT_FLAG_QUEUE_BYPASS)) 214 (verdict & NF_VERDICT_FLAG_QUEUE_BYPASS))
222 goto next_hook; 215 goto next_hook;
diff --git a/net/netfilter/nfnetlink_queue.c b/net/netfilter/nfnetlink_queue.c
index a659e57aa576..7d81d280cb4f 100644
--- a/net/netfilter/nfnetlink_queue.c
+++ b/net/netfilter/nfnetlink_queue.c
@@ -606,12 +606,9 @@ static struct nf_queue_entry *
606nf_queue_entry_dup(struct nf_queue_entry *e) 606nf_queue_entry_dup(struct nf_queue_entry *e)
607{ 607{
608 struct nf_queue_entry *entry = kmemdup(e, e->size, GFP_ATOMIC); 608 struct nf_queue_entry *entry = kmemdup(e, e->size, GFP_ATOMIC);
609 if (entry) { 609 if (entry)
610 if (nf_queue_entry_get_refs(entry)) 610 nf_queue_entry_get_refs(entry);
611 return entry; 611 return entry;
612 kfree(entry);
613 }
614 return NULL;
615} 612}
616 613
617#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER) 614#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
@@ -706,7 +703,7 @@ nfqnl_enqueue_packet(struct nf_queue_entry *entry, unsigned int queuenum)
706 nf_bridge_adjust_skb_data(skb); 703 nf_bridge_adjust_skb_data(skb);
707 segs = skb_gso_segment(skb, 0); 704 segs = skb_gso_segment(skb, 0);
708 /* Does not use PTR_ERR to limit the number of error codes that can be 705 /* Does not use PTR_ERR to limit the number of error codes that can be
709 * returned by nf_queue. For instance, callers rely on -ECANCELED to 706 * returned by nf_queue. For instance, callers rely on -ESRCH to
710 * mean 'ignore this hook'. 707 * mean 'ignore this hook'.
711 */ 708 */
712 if (IS_ERR_OR_NULL(segs)) 709 if (IS_ERR_OR_NULL(segs))